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