38
kyon_mm #syoboben 2015/02/21 できるチューリング完全! SQLでもいろいろできる

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

  • Upload
    kyon-mm

  • View
    1.554

  • Download
    3

Embed Size (px)

Citation preview

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

kyon_mm #syoboben

2015/02/21

できるチューリング完全!

SQLでもいろいろできる

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

kyon_mm

Test Architect

TDD/BDD Expert

27 years old

TDD/BDD超入門

STA 15章

Self Introduction

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

某「さっき会ったのがしょぼちむさんですよ!」

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

某「さっき会ったのがしょぼちむさんですよ!」

きょん「まぢで!」

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

某「さっき会ったのがしょぼちむさんですよ!」

きょん「まぢで!」

某「来月Oracleとか、データモデル設計について勉強会あるんですよ」

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

某「さっき会ったのがしょぼちむさんですよ!」

きょん「まぢで!」

某「来月Oracleとか、データモデル設計について勉強会あるんですよ」

きょん「まぢで!でもRDBわからん。。。」

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

某「さっき会ったのがしょぼちむさんですよ!」

きょん「まぢで!」

某「来月Oracleとか、データモデル設計について勉強会あるんですよ」

きょん「まぢで!でもRDBわからん。。。」

某「だいたいなんでもいいらしいよ」

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

某「さっき会ったのがしょぼちむさんですよ!」

きょん「まぢで!」

某「来月Oracleとか、データモデル設計について勉強会あるんですよ」

きょん「まぢで!でもRDBわからん。。。」

某「だいたいなんでもいいらしいよ」

きょん「あー。そうか。なんでもいいのか。よし、チューリング完全について話そう。」

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

idea…関係代数、定理、証明の話

デッドロックをモデル検査する話

データモデルのカテゴリについて

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

Today! Insert Performance!

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

Agenda

Problem on Testing, Migrating

SQL

Conclusion

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

Problem on Testing, Migrating

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

Situationテストのために大量のレコードが必要だ。時間がすごいかかる。。。

テーブルを変更しなければいけない。データ移行に時間がすごいかかる。。。

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

Data Create Tool

Factory Girl,etc はモデルベースでやりやすい部分もあるが、実行速度についてはあまり気にされていない。

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

ToolMyBatis,etc は版管理のサポートはしてくれるけれど、どう行うかについてのサポートはとても薄い。

実行時間が肥大化する問題については解決しない。

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

Example

3億件以上のテストデータを用意して、アプリケーションのパフォーマンスを計測したい。

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

Agenda

Problem on Testing, Migrating

SQL

Conclusion

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

SQL

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

Stored Procedure

RDBMSで高速化といえば!!!

書きたくない筆頭。

2時間くらいかかる。

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

Bulk Insert

INSERTでの高速化といえば!!

ORM経由みたいなので楽に実行出来る事もままある。

だいたい数十分で終わる。

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

-kyon_mm

“僕が耐えられるレスポンス時間は20分が限度だ”

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

Recursive CTE

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

CTE1クエリ内で何度も問い合わせをできる再帰的に扱える機能

他の方法と違って基本的にはテストデータ読み込みにIOが発生しない感じになるので、爆速。

10分前後で完了する。

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

 CTE

WITH Hoge (xxx,yyy) AS (SELECT aaa, bbb from …)SELECT xxx, count(yyy)FROM Hoge …

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

CTE

変数のグループ名(変数名1, 変数名2, ...) AS (SELECT 変数名1の値, 変数名2の値 ...)

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

 Recursive CTE

WITH Hoge (xxx,yyy) AS (SELECT aaa, bbb from … UNION ALL SELECT …)SELECT xxx, count(yyy)FROM Hoge …

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

 Recursive CTEWITH Hoge (xxx,yyy) AS ( [初期化を書く部分] UNION ALL [再帰を書く部分])SELECT [最終的な出力部分]

WITHで定義する共通表(ex. Hoge)はいくつでもつくれる

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

 In Shortly

再帰CTEによって繰り返しが表現できるようになったことで、Whereで条件分岐ができるし、

SQLはチューリング完全である!

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

 In Shortly

基本的に再帰しやすいデータがやりやすいので、ある規則にしたがったデータの作成に使いやすい。

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

SQL

http://bleis-tift.hatenablog.com/entry/20100201/1265035070

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

CTE

http://www.slideshare.net/odashinsuke/cte-12545515

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

Brain f*ck

http://bleis-tift.hatenablog.com/entry/20090610/1244615237

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

Calculator

http://bleis-tift.hatenablog.com/entry/20090610/1244560784

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

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/

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

Agenda

Problem on Testing, Migrating

SQL

Conclusion

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

Conclusion

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

Conclusion

RDBのデータ作成を高速に行いたくなったら再帰CTEを思い出せ!

SQLでいろいろ出来ると楽しいよ。