プロジェクト開発者 SQLite は実験的な HCtree バックエンドのテストを開始しました 行レベルのロックをサポートし、クエリ処理で高レベルの並列処理を提供します。
彼らが取り組んでいる新しいバックエンドに関しては、これが言及されています クライアントサーバーシステムでSQLiteを使用する効率を改善することを目的としています データベースへの多数の同時書き込み要求を処理する必要があります。
ラス 最初に使用された b-tree 構造 SQLite でデータを保存する このタイプの負荷用には設計されていません。、これにより、SQLite は XNUMX つのストリームのみへの書き込みに制限されます。 実験として、開発者は、書き込み操作の並列化により適した、ストレージに HCtree 構造を使用する代替ソリューションの開発を開始しました。
HC-tree (hctree) プロジェクトは、次のように通常の SQLite を改善する新しいデータベース バックエンドを開発する試みです。
並行性の向上: begin-concurrent 拡張機能を使用すると、これが変更され、ページ レベルで楽観的ロックを使用して同時に実行できるようになります。 これにより同時実行性がいくらか向上しますが、ページ レベルのロックは論理的に独立したトランザクション間の競合を検出でき、COMMIT 操作は依然としてシリアル化する必要があります。
レプリケーションのサポート: ストック SQLite は、 セッション延長これにより、コミットされたトランザクションの内容をシリアル化して、XNUMX 番目のデータベースに送信および適用できます。 Hctree はこれをデータベース バックエンドに統合し、そのようなトランザクションをリーダー/フォロワー構成のフォロワー データベースに適用するためのサポートを追加します。 この場合、主要なデータベースから受け取ったトランザクションは、最初に主要なデータベースに適用されたトランザクションよりも高速かつ高い同時実行性で適用できます。 トランザクションの検証。
データベース サイズの制限の排除: Stock SQLite は 32 ビットのページ番号を使用します。 デフォルトのページ サイズである 4 KiB を使用すると、データベースの最大サイズは 2^44 バイトまたは 16 TiB になります。
複数の操作を同時に処理するには、 HCtree ログはトランザクション分離メカニズムを使用します これは、MVCC (複数バージョンの封じ込め制御) に似たページ レベルのロックを使用しますが、ページ セットの代わりにキー範囲とキー範囲に基づくトランザクション制御を使用します。
読み取りおよび書き込み操作は、データベース スナップショットに対して実行されます。その変更は、トランザクションが完了した後にのみメイン データベースに表示されます。
クライアントは、次の XNUMX つの操作を使用してトランザクションを開くことができます。
- «ベギン«: トランザクションは、他の顧客のアクセス データを考慮しません。 書き込み操作がトランザクション内で実行される場合、実行中にデータベースへの他の書き込み操作がなかった場合にのみ、トランザクションをコミットできます。
«同時開始«: トランザクションは、他のクライアントのアクセスに関する情報を収集します。 書き込み操作がトランザクション内で実行される場合、スナップショットが作成されてから他のトランザクションがデータベースにコミットされていれば、トランザクションをコミットできます。
«独占的に始める«: トランザクションを開いた後、完了するまで他のトランザクションの操作をブロックします。
HCtree はマスター/スレーブ レプリケーションをサポートしているため、トランザクションを別のデータベースに転送し、セカンダリ データベースをプライマリ データベースと同期させることができます。
HCtree はデータベース サイズの制限も取り除きます。HCtree は 32 ビットのデータ ページ識別子の代わりに 48 ビットの識別子を使用します。これにより、データベースの最大サイズが 16 テビバイトから 1 エクスビバイト (XNUMX 万テビバイト) に増加します。
HCtree バックエンドでの SQLite のパフォーマンスは、少なくとも従来のシングルスレッド バックエンドと同程度であると予想されます。 HCtree をサポートする SQLite クライアントは、HC-tree データベースと従来の SQLite データベースの両方にアクセスできます。