PHP DBMSエンジン

読者の皆さん、こんにちは。 私のDBMSは、PHPの既存のDBMSのポートではありません(たとえば、 C#-SQLITEとは異なります)が、独自の開発です。 TxtSQLのような既存のエンジンとの主な違いは、インデックスのサポートです。 PRIMARY INDEXのみを使用する場合、ラップトップの挿入速度は5000 /秒に達します。 PHPの場合、これは非常に良いことです。



なんで?



私にとって最初の主な目標は純粋に理論的な関心でした。MySQLにリンクするほとんどのスクリプトをサポートせずに動作させるために、MySQL関数をPHPで置き換えることが常に望まれていました。



SQLパーサーを作成する前に、このDBMSをサポートするプラットフォームを作成する必要があります。 最初はこれらの目的でphpTableを使用しましたが、インデックスをサポートしていないため、大量の情報を処理することは不可能でした。 また、インデックスをサポートする他のDBMSが見つからなかったため、データベースのカーネルを自分で作成する必要がありました。 私はかなり長い間開発を続けてきました。たとえば、 Bツリーのサポートを追加したり、それらに基づいてインデックスを整理したりといった、いくつかの進化的なステップを経ました。



開発を手伝ってくれる人を探しているので、今の形でここに投稿します。 たとえば、私のDBMSにはSQLサポートがありません。そのようなサポートを追加したいのですが、私自身はデータベースコアのさらなる開発に携わりたいです。



どんな感じ



この段階では、データベースのコアは開発の初期段階にあり、デバッグコードの一部は、ここで紹介するバージョンから削除されていません。 もちろん、それらは今すぐ削除してDBMSで使用できますが、これに注意を集中したくありません。 「戦闘中」のカーネルを見るのが待ちきれない場合は、デモをご覧ください。



仮のフォーラムにインポートされたフォーラムデータベースforum.dklab.ru



当初、フォーラムではMySQLを使用していましたが、DBMSのカーネルで動作するように変更されました(このプロセスには数時間しかかかりませんでした)。 forum.dklab.ruデータベースには約150,000のメッセージが含まれ、メッセージデータベースには約60 MBが必要です(ソースは誰にでも送信できます)。



現在のデータベース機能



現時点では、ベースはAUTO_INCREMENTフィールドをサポートしています。これは、PRIMARY INDEXと、MySQLのINDEXおよびUNIQUEインデックスの類似物です。 複数のインデックス付きフィールドがサポートされています。 現在、複合インデックスのサポートはなく、これまでのところ計画はありません。 また、数値フィールド(INT)のみがインデックスに使用できます。



現在、文字列の取得に使用されるメソッドの構文では、「 field_name operator value 」という形式の条件を1つだけ取得できます。ここで、演算子は「> <= IN」のいずれかです。 インデックスは、「 field_name = value」という形式のクエリにのみ使用されます。 PRIMARY INDEXには、IN演算子を使用したサンプリングの最適化もあります(これはMySQLの完全な類似物です)。



これらの機能は非常に小さいように見えるかもしれませんが、これは、たとえば、カーネルに基づいたフォーラムやCMSを作成するのに十分です。



技術的な詳細



PRIMARY INDEX ( AUTO_INCREMENT ) , , : id*4 (4 = sizeof(int)) . .



UNIQUE -. , - ( ~log(- ) / log(70) ), — .



INDEX -, . , INDEX .



32-, 2 , . , «» — unix



cat *.idx *.btr *.pri > /dev/null







, . , .







, .



$db = new YNDb('my_data');







— . , — , .



$db->create('test_table', array('id' => 'INT', 'name' => 'TINYTEXT'), array('AUTO_INCREMENT' => 'id') );







:



for($i = 0; $i < 100; $i++)

{

$db->insert('test_table', array('name' => 'value'.$i));

}








, , limit', .. :



$results = $db->select('test_table', array('cond' => 'id > 30', 'limit' => '30,50', 'order' => array('name', SORT_ASC) ) );



* This source code was highlighted with Source Code Highlighter
.








?



Google Code:



code.google.com/p/yndb



, , , «YNDbAdmin» — 300 , .



:)!



All Articles