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

Preview:

Citation preview

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でいろいろ出来ると楽しいよ。

Recommended