SQLite 開発者が並列書き込みをサポートする HC ツリー バックエンドを開発

SQLite プロジェクト開発者は、行レベルのロックをサポートし、クエリ処理時に高レベルの並列化を提供する実験的な HCtree バックエンドのテストを開始しました。 新しいバックエンドは、データベースへの大量の同時書き込み要求を処理する必要があるクライアント/サーバー システムで SQLite を使用する効率を向上させることを目的としています。

データを保存するために SQLite でネイティブに使用される B ツリー構造は、このタイプのロード向けに設計されていないため、SQLite の書き込みは XNUMX つのスレッドのみに制限されます。 実験として、開発者は、書き込み操作の並列化により適したストレージに HC ツリー構造を使用する代替ソリューションの開発を開始しました。

複数の操作を同時に実行できるようにするために、HCtree レコードは、ページ レベルのロックを使用するトランザクション パーティショニング メカニズムを使用します。これは MVCC (Multi-Version Concurrency Control) に似ていますが、ページ セットではなくキーとキー範囲に基づくトランザクション チェックを使用します。 読み取りおよび書き込み操作はデータベース スナップショットに関連して実行され、その変更はトランザクションが完了した後にのみメイン データベースに表示されます。

クライアントは、次の XNUMX つのオープン トランザクション操作を使用できます。

  • 「BEGIN」 - トランザクションは他のクライアントのアクセス データを考慮しません。 トランザクション内で書き込み操作が実行される場合、トランザクションは、その実行中にデータベース内に他の書き込み操作がなかった場合にのみコミットできます。
  • 「BEGIN CONCURRENT」 - トランザクションは他のクライアントのアクセスに関する情報を収集します。 トランザクション内で書き込み操作が実行される場合、スナップショットの作成以降にデータベース内で他のトランザクションがコミットされていれば、トランザクションをコミットできます。
  • 「BEGIN EXCLUSIVE」 - トランザクションを開いた後、完了するまで他のトランザクションからの操作をブロックします。

HCtree はマスター/スレーブ レプリケーションをサポートしています。これにより、トランザクションを別のデータベースに移行し、セカンダリ データベースとプライマリ データベースの同期を保つことができます。 HCtree はデータベース サイズの制限も取り除きます。HCtree は 32 ビット データ ページ識別子の代わりに 48 ビット識別子を使用します。これにより、データベースの最大サイズが 16 テビバイトから 1 エクスビバイト (XNUMX 万テビバイト) に増加します。 HCtree バックエンドを使用した SQLite のパフォーマンスは、従来のシングルスレッド バックエンドと同等であることが期待されます。 HCtree をサポートする SQLite クライアントは、HC ツリーベースのデータベースと従来の SQLite データベースの両方にアクセスできます。

出所: オープンネット.ru

コメントを追加します