ToyQL: Dreaming

SQL の使えるデータベースでも書いてみるかなと思い立つ。そんな簡単なものではないはずだから完成の見込みは薄いけれど、できることがわかっているものを書いても面白くないからね。せっかくなので、今回は作業および調査の記録をここに書き残してみたい。でも挫折したら一連の投稿は公開せずに捨てると思う。かっこわるいから。

データベーステクノロジにはなんとなく憧れがあったけれど、仕事で縁がないせいかまったく詳しくない。趣味で自作するにしても B-tree から組み上げると気が遠くなりそう。 そして SQL は好きになれなかったし一方で NoSQL も面白くない。そんな状態のまま10年くらいが過ぎた。

けれどこのごろ仕事で BigQuery をさわったおかげでちょっとだけ SQL と縁が出てきた。そして OLTP でなく OLAP 寄りのデータベースなら B-tree からはじめなくてもよさそう。実装すれば SQL への理解も深まって良いかもしれない。なんて安直な動機がはじまり。

どんなものを実装すると楽しいかを考える。できれば新しい言語が使いたい。Rust や Scala が使えれば満足度が高そうだけれど、あまりに使いみちがなさそうで盛り上がらない。でもそれを Pandas あたりに繋げば使い道があるかもなあと考えた後、いっそ Pandas の DataFarme 相手に Python で SQL を実装するのはどうかと思い至った。DataFrame はほぼデータベースのテーブル(しかも column oriented) だし、データのロードとかはぜんぶ Pandas に任せられる。SQL を実装するところだけやればよい...気がする。Python は新しい言語とは言えないけれど、書捨てより真面目に使えるようになっていいとは思っていた。Java や C++ よりはやる気になる。

世の中には pandasql  という似たようなことをするライブラリがある。これはデータを sqlite にインポートして SQL を解釈させる。何も面白くない。そもそも現状の自分の SQL レベルを踏まえると競合や実用性を考えても仕方ない。気にしなくてよかろう。

遅そうではある。ま、仕方ないね。速さが気になるところまでいったら上出来。 C++ につなぐとか色々できることはあるでしょう。

名前。実用性を重んじず SQL を理解するのが主目的、ということを強調すべく toyql と呼ぶ。

自分のデータベースや SQL への理解度。ほぼ素人。むかし cow book を読んで感動した記憶があるものの、しょうじき中身は覚えてない。RDB エンドユーザ体験は通りすがりで何度かさわったくらい。大半は ORM 越し。最近ちょと BigQuery を書いているけれど、難しいことはしてない。真面目にスキーマを決めたことはない。正規化とか怪しい。たぶんできない。改めて書き出してみるとほんと素人だな・・・。

どこからはじめよう?今のところまったく何の見当もつかない。最初はデータベースの教科書を読みなおそうと思ったが、すごく時間がかかりそうな上にいまいちピンとくる教科書が見当たらない。じゃあ SQL の仕様書はどうかとおもって探すも 1000 ページくらいある。自分の現状だと歯が立たなそう。

PostgreSQL のマニュアルをみたら、それなりに詳しく SQL が載っていた。これを読むべきか?でも OLAP を作るのに OLTP を調べるのは何か違う気がする。手元に置いておくくらいにしよう。

まずはなにかデータベースのコードでも読もうか。あとは Python を少し勉強しなおし、NumPy と Pandas も少し調べて、Python 用の parser generator を探して試して・・・

コード書く前の準備がけっこうある。できれば一ヶ月くらい調査したらコードを書き始めたい。明らかに勉強する必要のあることが目の前にあるのは気が滅入るような元気がでるような。ガッと書き始められないところに力の無さを感じる。まあ事実なので仕方ない。

不安要素。なにより時間のなさ。そして時間がないことからくるやる気の低落。それにプログラミング力。他の優先事項もある。毎日読むなり書くなり何かはして、やる気を途切れさせないようにしたい。できればね。