仕様をつめる(DB仕様Ver 0.10)
最近、自作OSSのメモリDBの事を書いていないが、忘れてしまったわけではない。
今回の、Web向けアプリケーションサーバを作りながら、リアルな仕様とその実装方法をつめている。
現在のところ、こんな感じ。でも、まだ、仕様はバージョンアップしそう。
データベース:Crossfire3層エンジン
SQL処理、トランザクション処理、ストレージ処理を別のサーバーで扱う
ことにより、高スループット処理が可能。
高トランザクション処理に対しても、仮想コミット技術により、ネット
ワークのオーバーヘッドを感じません。
利用サーバ :サーバー2台を推奨
・ストレージサーバー 1台
対応アーキテクチャー:
・64Bit Linuxに特化
(おそらく、Soralis64 FreeBSDx86_64はテストすれば可)
・完全メモリDB
推奨メモリ:
・ストレージサーバー
扱うデータより大きめ推奨
大域処理を使う場合は、ストレージサーバーと同等を推奨
機能:
検索インデックス機能
・独自高速インデックス
(高速検索性能だけでなく、頻繁なデータ更新の高速性も考えられたバランスの良いインデックスアーキテクチャーを採用)
・高速全文検索インデックス(like %XXX% に対応)
障害対策
・ログジャーナリング機能による復旧
・ネットワーク分散ログジャーナリングによる復旧
(クライアントにコミットOKを返した※したデータに関しては、電源が落ちても復旧可能)
※クライアントに返らなくても、コミットを受付け完了したトランザクション処理に関しては復旧可能
・Adaptive Log Transaction(特許申請中)実装
・MVCCトランザクションを実装
・隔離レベルはSERIALIZABLE
・仮想コミット技術により、細かく大量のUPDATE,INSERT,UPDATE処理
もネットワークのオーバーヘッドを感じません。
(障害対応処理とも連携していて、安心して使えます)
行ロック
・行ロック+行リードコミッティッド
(行レベルでトランザクションの隔離レベルをSERIALIZABLE→
READ COMITTEDに落とす。
SELECT FOR UPDATE文で対応)
性能面:
・MyISAM(トランザクションなし、業界最高速)の10倍のスループット性能を予定
(BEGIN→INSERT→COMMIT のトランザクションで現在で5万回/秒)