自作OSSデータベース

仕様をつめる(DB仕様Ver 0.10)

最近、自作OSSのメモリDBの事を書いていないが、忘れてしまったわけではない。 今回の、Web向けアプリケーションサーバを作りながら、リアルな仕様とその実装方法をつめている。現在のところ、こんな感じ。でも、まだ、仕様はバージョンアップしそう。 デー…

複合キーと順番

CREATE TABLE文内で、PRIMARY KEY(column1, cokumn2, ....)とかくと、複合キーができるが、結構順番が重要だ。 でも、毎回重要なわけではない。 WHERE区で column1 = 'AAA' and column2 = 'bbb' みたいに完全一致で指定するだけの場合は関係ない。でも、ORDE…

SQLプロセッサ部分

しかし、もう、かなりSQLの内部処理が身に染みてきた。 自作OSSデータベースのSQL処理+集計部分は、自分で作ったほうが、MySQLを使うより高速に出来るようなきがしてきた。MySQLだと、上位のSQLProcessor部分でたくさん判断しすぎて、下の方(ストレージエ…

Order by句とlimit句とbool代数

正直、これが、実は今回のメモリDB開発のラスボスになりそう。というのは、bool代数で、母集合をしぼるためにどのインデックスを使うかというのを前回、できたと書いた。しかし、じつは、これに加えて、特定フィールドでソートするOrder by句とレコードを最…

複合インデックスも作ろうかな

結構、実際にDBを使ったソフトウェアを開発していると、複合キーがあると相当良いケースが多い。複合キーがない場合は、一度インデックスを使うが、そこで、Hitした値をスキャンしなくてはならない。最初のインデックスでHitした内容が少なければ、それでも…

行ロックの実装仕様

行ロックの実装の仕様でずーーーっと悩んでいたけれども、やっと、仕様が決まりそうです。たんなる行ロックではなく、「行ロック+行リードコミッティッド」になりそうです。 行単位でロックをかけるところはわかりやすいかも知れませんが、行リードコミッテ…

メモリDBから大きな発展

結局は、メモリDBを自分で作ることになってしまったが、逆にこれは良かった。なぜならば、メモリDBをコンポーネント化したら、いろんなところで使えるからだ。 トランザクションモジュール内でも使えるし、すごく重宝する。インデックス情報とかを自動で認識…

ルールベース or コストベース

かなり、メモリDBがそれらしくなってきた。というのは、今回はルールベースになってしまうが、それなりにかなり最適化された処理を行うことができる。 WHERE句のなかが、結構ややこしくても再帰的に処理するロジックになっている。あと、インデックスを使う…

template使ったら速度が2倍のに

僕のトランザクション処理パーツは、今まで、秒間で10万件処理が出来ていた。 (for文でまわして、1CPUで直列実行) で、リリースビルドとDebugビルドがほとんど同じ速度だった。なんだか、ソートがすごく遅いなあと感じて、ひそかに仮想関数のせいだと思…

ソースコードがすごい量に

オープンソースにするのに、ソースコードの量があまりに少なかったらどうしようと危惧していたが、それは大丈夫そう。もう、すでにMySQLのInnoDBのコードより量は多くなっている。 現在、Releaseビルドでビルドしたバイナリが250KB。これからさらに、チュー…

Web・携帯のためのDB

だいぶ、全文検索が出来てきた。いくら、64BitがターゲットのメモリDBとはいっても、全てのテーブルの全文検索用のインデックスを全部メモリにおいてしまっては、本当に死亡だと思うので、一個か2個だけLRUアルゴリズムで残すことにした。 (残す数は設定可…

WeB向けにバランスの取れたDB

結構、Web向けに、機能バランスが取れたDBってない。・likeが速い(全文検索) ・Alterとかもちゃんとできる ・トランザクションをサポート ・レスポンスが良く、高トランザクションをこなすことが出来るこれだけで、1点、2点満たしているのはあるけれど、…

32Bitを斬り捨てる、この潔さFoooo!!!

いやあ、潔い。 32Bitを斬り捨てると、本当に潔いプログラムが書けるし、32Bitでコンパイル出来ないとか言う苦情もこなさそうだ。しかし、Core2Duoって速いなあ〜〜。 まだ、全然CPUの性能を引き出してないのに、動きがかなり速いです。 やっぱし、キャッ…

超高速全文検索をつける

今、DBのインデックスに高速文字列検索をつけている。 これがあれば、データベースからYahooみたいな検索がサクサクできる。さすがに、全文検索のインデックスは大きいので、ディスクにしまうことにしました。

実メモリを消費するか、論理アドレスを消費するか

mmap()は、仮想記憶の仕組みを使う。だから、メモリにマップすると、そのファイルの大きさの分のメモリがmallocされる。だけれども、別にその領域にたいして全部実メモリがマップされるわけではない。 アクセスがあったところに実メモリがマップされて、この…

自分でAssertコードにやられる

僕のプログラムには#ifdebug AssertManager::neverComeHere(__LINE__, __FILE__); #endif // _DEBUGとか、アサーションのコードが結構埋まっている。 つまり、なるべく多くのテストをする為に、テスト実行自体が、内部パーツのテスト行為になっている。しか…

long longで脱32BIt

64ビットになったら、てっきりINTが64ビットになるかと思ってたら、そうじゃなかった。64ビット整数はlong longだった。 これで、32Bitではコンパイルできなくなるので、かなり64Bit特化っぽくなってきました。

64Bit環境で2日潰れる

僕の作るMySQLのエンジンは64Bit向けだ。なぜならば、メモリDBの新しいアーキテクチャーを取るので、32Bitで駄目ではないけれども、やっぱり、限界がある。 でも、趣味で使うくらいなら大丈夫と思う。MVCCトランザクション処理用のサーバーはよいかも知…

Adaptive Log Transaction Containerがだいぶ出来る

MyISAMみたいなトランザクションなしのデータベースに外付けで、トランザクション機能が付けられる「Adaptive Log Transaction Container」がだいぶ出来てきた。データストア部分とトランザクション処理部分を別サーバーで動かすことも可能だ。 アルゴリズム…

結局自分でメモリDBをつくることになる

結局、機能的にバランスのとれたメモリDBがなく、自分で作ることになった。今度は、全部、自分に著作権があるので、GPLで出していこうと思う。 GPLは、しかし、良く考えられたライセンスだと思う。最近、オープンソースの傾向がすごく強くなってきた。 オー…

仕事と仕事の関連

今、うちでは大きく分けて二つの仕事をやっている。1、完全自社開発のメモリDBとトランザクションエンジン 2、コンパイラ技術を生かしたWebエンジンの企業との共同開発どちらも、普通の請負に比べたらかなり学術的な知識も、泥臭い実装技術も必要でハイレ…