SQLite では、並列書き込みをサポートする HCTree バックエンドで既に動作しています。

SQLiteの

ACID 準拠のリレーショナル データベース管理システムであり、C で書かれた比較的小さなライブラリに含まれています。

SQLiteプロジェクトの開発者たちは、行レベルのロックをサポートし、クエリ処理において高いレベルの並列性を提供する実験的なHCtreeバックエンドのテストを開始した。

彼らが開発中の新しいバックエンドに関して、その目的は、データベースへの同時書き込みリクエストを多数処理する必要のあるクライアント/サーバーシステムにおいて、SQLiteの使用効率を向上させることであると述べられている。

SQLiteで元々データ格納に使用されていたBツリー構造は、このような負荷に対応するように設計されておらず、SQLiteは1つのシーケンスへの書き込みしかできません。そこで開発者たちは実験的に、書き込み操作の並列化に適したHCツリー構造をデータ格納に使用する代替ソリューションの開発に着手しました。

HC-tree (hctree) プロジェクトは、次のように通常の SQLite を改善する新しいデータベース バックエンドを開発する試みです。

並行処理の改善: begin-concurrent拡張機能を使用すると、楽観的ページレベルロックを使用して並行実行できるようになります。これにより並行処理はわずかに改善されますが、ページレベルロックは論理的に独立したトランザクション間の競合を検出する可能性があり、COMMIT操作は依然として直列化する必要があります。

レプリケーションのサポート:標準のSQLiteはセッション拡張機能をサポートしており、コミットされたトランザクションの内容をシリアル化して、別のデータベースに送信および適用することができます。Hctreeはこの機能をデータベースバックエンドに統合し、リーダー・フォロワー構成において、このようなトランザクションをフォロワーデータベースに適用する機能を追加しています。この場合、リーダーデータベースから受信したトランザクションは、トランザクション検証が不要なため、リーダーデータベースに最初に適用されたトランザクションよりも高速かつ高い同時実行性で適用できます。

データベースサイズの制限を解除する:標準の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 データベースの両方にアクセスできます。

出典:https://sqlite.org/


Googleで優先ソースとして追加する