ScalarDB デザイン
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このドキュメントでは、ScalarDB の設計と実装について簡単に説明します。ScalarDB の概要とその使用例については、ScalarDB の概要を参照してください。
全体的なアーキテクチャ
ScalarDB は、アプリケーションとデータベースの間に配置されるハイブリッドトランザクション/分析処理 (HTAP) ミドルウェアです。次の図に示すように、ScalarDB は、Core、Cluster、Analytics の3つのコンポーネントで構成されています。ScalarDB は基本的に階層型アーキテクチャを採用しているため、Cluster コンポーネントと Analytics コンポーネントは、Core コンポーネントを使用して基盤となるデータベースとやり取りしますが、正確さを犠牲にすることなくパフォーマンスを最適化するために Core コンポーネントをバイパスすることもあります。同様に、各コンポーネントも複数のレイヤーで構成されています。
コンポーネント
次のサブセクションでは、各コンポーネントについて1つずつ説明します。
Core
Apache 2 ライセンスの下でオープンソースソフトウェアとして提供される ScalarDB Core は、ScalarDB の不可欠な部分です。Core は、基礎となるデータベースを抽象化する抽象化レイヤーと、各データベースの抽象化を実装するアダプター (またはシム) を備えたデータベースマネージャーを提供します。さらに、データベース抽象化の上にトランザクションマネージャーを提供し、Scalar の新しい分散トランザクションプロトコルである Consensus Commit に基づいて、データベースに依存しないトランザクション管理を実現します。Core は、シンプルな CRUD インターフェースを提供するライブラリとして提供されます。
Cluster
商用ライセンスでライセンスされている ScalarDB Cluster は、Core コンポーネントがクラスター化されたサーバーとして機能するためのクラスタリングソリューションを提供するコンポーネントです。Cluster は主に、多数の小規模なトランザクションおよび非トランザクションの読み取りと書き込みがある OLTP ワークロード向けに設計されています。さらに、認証、承認、保存時の暗号化、きめ細かなアクセス制御 (属性ベースのアクセス制御) などのエンタープライズ機能もいくつか提供しています。Cluster は Core コンポーネントと同じ CRUD インターフェースを提供するだけでなく、SQL および GraphQL インターフェースも提供しています。さらに、複数のベクターストアと対話するためのベクターストアインターフェースも提供します。Cluster は Kubernetes Pod 内のコンテナーとして提供されるため、コンテナーを増やすことでパフォーマンスと可用性を高めることができます。
Analytics
商用ライセンスでライセンスされている ScalarDB Analytics は、Core コンポーネントによって管理されるデータ、または ScalarDB を使用しないアプリケーションによって管理される データに対してスケーラブルな分析処理を提供するコンポーネントです。Analytics は主に、少数の大規模な分析読み取りクエリがある OLAP ワークロード向けに設計されています。さらに、Spark を通じて SQL および DataSet API も提供されます。Analytics コンポーネントは Apache Spark エンジンにインストールできる Java パッケージとして提供されるため、Spark ワーカーノードを増やすことでパフォーマンスを向上させることができます。
メタデータテーブル
ScalarDB は機能を提供するために基盤となるデータベース内でさまざまな種類のメタデータを管理しています。次の表は、各コンポーネントによって管理されるメタデータをまとめたものです。
コンポーネント | メタデータテーブル | 用途 | 格納場所 |
---|---|---|---|
Core | scalardb.metadata | データベーススキーマ情報用 | ScalarDB の下にあるすべてのデータベース内 |
Core | coordinator.state | トランザクションステータス用 | コーディネーターテーブルを格納するために指定された1つのデータベース内 |
Core | アプリケーション管理テーブル | ログ先行書き込み (WAL) 情報用 | Consensus Commit によってアクセスされるすべてのテーブル内 |
Cluster | scalardb.users , scalardb.namespace_privileges , scalardb.table_privileges , scalardb.auth_tokens | 認証と承認用 | scalardb のシステム名前空間を格納するために指定された1つのデータベース内 |
Cluster | scalardb.encrypted_columns | 保存時の暗号化用 | scalardb のシステム名前空間を格納するために指定された1つのデータベース内 |
Cluster | scalardb.abac_* | 属性ベースのアクセス制御用 | scalardb のシステム名前空間を格納するために指定された1つのデータベース内 |
Cluster | リモートレプリケーション管理テーブル (transaction_groups ) | リモートレプリケーションにおけるプライマリサイトからの書き込み操作のバッファリング用 | レプリケーションデータベース内 |
Cluster | リモートレプリケーション管理テーブル (__records サフィックス付き) | リモートレプリケーションにおけるバックアップサイトデータベーステーブルのレプリケーション状態管理用 | バックアップサイトデータベース内 |
Analytics | カタログサーバーによって管理されるすべてのテーブル | データカタログ用 | カタログサーバーデータベース内 |
ScalarDB を通じてアクセスされるデータベースのバックアップを取得する必要がある場合は、ScalarDB によって管理されるメタデータのバックアップも取得する必要があります。詳細については、ScalarDB で使用されるデータベースのバックアップと復元方法を参照してください。
制限事項
ScalarDB はアプリケーションとデータベースの間で動作するため、いくつかの制限があります。このセクションでは、ScalarDB の制限事項をまとめています。