💋
TypeScript で CSV に SQL を発行するやつを作る
作ったやつ
こんな感じで動くやつを作りました。(作っています)
この記事で言いたいこと
Database Design and Implementation(Second Edition) は面白いのでおすすめです。
まとめ
- 便利なツールを作ったのでみんな使ってくれ的な記事ではないです
- Database Design and Implementation(Second Edition) が面白かったので何か作りたくなった
- TypeScript で CSV に SQL を発行するやつを作っている
- GROUP BY したり JOIN したりできる
- 作ってるやつ
- 実践で使えるようなものではないのでそういうツールが欲しい場合は以下のようなものを使うと良いと思います
-
Database Design and Implementation(Second Edition) は面白いのでおすすめです
- そんなに前提知識なくても読めます(なんとなく SELECT のクエリが書ける、で十分だと思う)
- ボリュームは結構あって、英語
- そんなに前提知識なくても読めます(なんとなく SELECT のクエリが書ける、で十分だと思う)
TypeScript で CSV に SQL を発行するやつを作る
Database Design and Implementation(Second Edition) が面白かった
こちらの記事を読んで楽しそうだったのでとりあえず本を読みました。
内容については記事を見ていただくと良いと思います。なんとなく SQL 書けます、みたいなレベルでも十分読める内容でした。一通り読んだ結果、わからないことが増えました。(なんで商用のデータベースだとあれができるんだ?みたいな疑問がいっぱいでてくる)
読み終わったのでなんか作ってみたくなった
RDBMS をスクラッチで作ろう、的な書籍なんですが、一通り読んでなんか作ってみたくなったので TypeScript で CSV に SQL を発行するやつを作ることにしました。
なんとなく動くようになった
TypeScript なのはブラウザで動いたら楽しい気がしたからです。
以下で実際に動かすことができます。
こんな感じで動きます。
書いたコードについて
- 実行計画はない
- 状況に関わらず常に同じ流れでクエリが実行される
- 書籍だと最適化の基準が基本的にブロックへのアクセス数なのでインメモリだとこの辺の考え方が変わってくる気がするけど、よくわかってない
- 状況に関わらず常に同じ流れでクエリが実行される
- インメモリ
- マージジョインとか B-Tree とか実装してない
- 直積に対して条件が一致するレコードを抽出するだけで JOIN している
- 書籍でいう 8 章のパイプライン処理を安直に実装していった
- 複雑な WHERE 句のパースがいまいちわからなかった(書籍だと完全一致を AND でつなぐ仕様)
- ので操車場アルゴリズムで逆ポーランド記法にして、レコードに対してマッチするか毎回チェックするようにした
-
name='inaba' AND age=32
だったら、name,inaba,=,age,32,AND
になる- クエリに合わせて実行計画を最適化するような場合、めちゃくちゃ相性が悪いような気もする
- そもそも複雑な条件式で実行計画をどうすればよいのか、よくわかってない
- クエリに合わせて実行計画を最適化するような場合、めちゃくちゃ相性が悪いような気もする
-
- ので操車場アルゴリズムで逆ポーランド記法にして、レコードに対してマッチするか毎回チェックするようにした
- 外部結合は軸になるテーブルに対してマッチするレコードを全探索している
- めちゃくちゃ効率が悪い
- 結合条件が単純なら結合のキーで先にソートすればよいが、複雑な場合にどうするといい感じなのかよくわからない
- めちゃくちゃ効率が悪い
- いろいろ動かない
- 副問合せとか
- SQL、何が動けば自分の中で完成とみなせるのかよくわからない
- パーサーの異常系の処理がめちゃくちゃ甘いのでブラウザで触ってるとたまにハングする
まとめ
- 便利なツールを作ったのでみんな使ってくれ的な記事ではないです
- Database Design and Implementation(Second Edition) が面白かったので何か作りたくなった
- TypeScript で CSV に SQL を発行するやつを作っている
- GROUP BY したり JOIN したりできる
- 作ってるやつ
- 実践で使えるようなものではないのでそういうツールが欲しい場合は以下のようなものを使うと良いと思います
-
Database Design and Implementation(Second Edition) は面白いのでおすすめです
- そんなに前提知識なくても読めます(なんとなく SELECT のクエリが書ける、で十分だと思う)
- ボリュームは結構あって、英語
- そんなに前提知識なくても読めます(なんとなく SELECT のクエリが書ける、で十分だと思う)
次は CSV ではなく書籍のように永続化部分から RDBMS を実装してみたいと思いました。
Discussion