Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

出来るチューリング完全!SQLでもいろいろ出来る! #syoboben

4,800 views

Published on

おおくの部分を口頭で説明したので、メモ書き的なスライドになっております。

http://connpass.com/event/10849/ での発表資料です。

Published in: Technology
  • Be the first to comment

出来るチューリング完全!SQLでもいろいろ出来る! #syoboben

  1. 1. kyon_mm #syoboben 2015/02/21 できるチューリング完全! SQLでもいろいろできる
  2. 2. kyon_mm Test Architect TDD/BDD Expert 27 years old TDD/BDD超入門 STA 15章 Self Introduction
  3. 3. 某「さっき会ったのがしょぼちむさんですよ!」
  4. 4. 某「さっき会ったのがしょぼちむさんですよ!」 きょん「まぢで!」
  5. 5. 某「さっき会ったのがしょぼちむさんですよ!」 きょん「まぢで!」 某「来月Oracleとか、データモデル設計につい て勉強会あるんですよ」
  6. 6. 某「さっき会ったのがしょぼちむさんですよ!」 きょん「まぢで!」 某「来月Oracleとか、データモデル設計につい て勉強会あるんですよ」 きょん「まぢで!でもRDBわからん。。。」
  7. 7. 某「さっき会ったのがしょぼちむさんですよ!」 きょん「まぢで!」 某「来月Oracleとか、データモデル設計につい て勉強会あるんですよ」 きょん「まぢで!でもRDBわからん。。。」 某「だいたいなんでもいいらしいよ」
  8. 8. 某「さっき会ったのがしょぼちむさんですよ!」 きょん「まぢで!」 某「来月Oracleとか、データモデル設計につい て勉強会あるんですよ」 きょん「まぢで!でもRDBわからん。。。」 某「だいたいなんでもいいらしいよ」 きょん「あー。そうか。なんでもいいのか。よ し、チューリング完全について話そう。」
  9. 9. idea… 関係代数、定理、証明の話 デッドロックをモデル検査する 話 データモデルのカテゴリについ て
  10. 10. Today! Insert Performance!
  11. 11. Agenda Problem on Testing, Migrating SQL Conclusion
  12. 12. Problem on Testing, Migrating
  13. 13. Situation テストのために大量のレコード が必要だ。時間がすごいかか る。。。 テーブルを変更しなければいけ ない。データ移行に時間がすご いかかる。。。
  14. 14. Data Create Tool Factory Girl,etc はモデル ベースでやりやすい部分もある が、実行速度についてはあまり 気にされていない。
  15. 15. Tool MyBatis,etc は版管理のサポー トはしてくれるけれど、どう行 うかについてのサポートはとて も薄い。 実行時間が肥大化する問題につ いては解決しない。
  16. 16. Example 3億件以上のテストデータを用 意して、アプリケーションのパ フォーマンスを計測したい。
  17. 17. Agenda Problem on Testing, Migrating SQL Conclusion
  18. 18. SQL
  19. 19. Stored Procedure RDBMSで高速化といえば!!! 書きたくない筆頭。 2時間くらいかかる。
  20. 20. Bulk Insert INSERTでの高速化といえば!! ORM経由みたいなので楽に実行 出来る事もままある。 だいたい数十分で終わる。
  21. 21. -kyon_mm 僕が耐えられるレスポンス時間は 20分が限度だ
  22. 22. Recursive CTE
  23. 23. CTE 1クエリ内で何度も問い合わせ をできる再帰的に扱える機能 他の方法と違って基本的にはテ ストデータ読み込みにIOが発生 しない感じになるので、爆速。 10分前後で完了する。
  24. 24.  CTE WITH Hoge (xxx,yyy) AS (SELECT aaa, bbb from …)
 SELECT xxx, count(yyy)
 FROM Hoge …
  25. 25. CTE 変数のグループ名(変数名1, 変 数名2, ...) AS
 (SELECT 変数名1の値, 変数名 2の値 ...)
  26. 26.  Recursive CTE WITH Hoge (xxx,yyy) AS (SELECT aaa, bbb from …
 UNION ALL SELECT …)
 SELECT xxx, count(yyy)
 FROM Hoge …
  27. 27.  Recursive CTE WITH Hoge (xxx,yyy) AS (
 [初期化を書く部分]
 UNION ALL [再帰を書く部分])
 SELECT [最終的な出力部分] WITHで定義する共通表(ex. Hoge)はいくつでもつくれる
  28. 28.  In Shortly 再帰CTEによって繰り返しが表 現できるようになったことで、 Whereで条件分岐ができるし、 SQLはチューリング完全であ る!
  29. 29.  In Shortly 基本的に再帰しやすいデータが やりやすいので、ある規則にし たがったデータの作成に使いや すい。
  30. 30. SQL http://bleis- tift.hatenablog.com/entry/ 20100201/1265035070
  31. 31. CTE http://www.slideshare.net/ odashinsuke/cte-12545515
  32. 32. Brain f*ck http://bleis- tift.hatenablog.com/entry/ 20090610/1244615237
  33. 33. Calculator http://bleis- tift.hatenablog.com/entry/ 20090610/1244560784
  34. 34. Proof http://assets.en.oreilly.com/1/event/ 27/High%20Performance%20SQL%20with %20PostgreSQL%20Presentation.pdf http://blog.coelho.net/database/ 2013/08/17/turing-sql-1/
  35. 35. Agenda Problem on Testing, Migrating SQL Conclusion
  36. 36. Conclusion
  37. 37. Conclusion RDBのデータ作成を高速に行い たくなったら再帰CTEを思い出 せ! SQLでいろいろ出来ると楽しい よ。

×