データをモデル化する
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
データモデリング (つまり、データベーススキーマの設計) とは、データへのアクセスに使用されるパターンと、ビジネスオペレーション内で実行されるクエリの種類を特定することで、データの保存方法と使用方法を概念化して視覚化するプロセスです。
このページでは、まず ScalarDB データモデルについて説明し、次にデータモデルに基づいてデータベーススキーマを設計する方法について説明します。
ScalarDB データモデル
ScalarDB のデータモデルは、Bigtable データモデルにヒントを得た拡張キー値モデルです。リレーショナルモデルに似ていますが、以下に示すようにいくつかの点で異なります。データモデルは、リレーショナルデータベース、NoSQL データベース、NewSQL データベースなど、さまざまなデータベースを抽象化するために選択されます。
次の図は、それぞれがレコードのコレクションである ScalarDB テーブルの例を示しています。このセクションでは、まず、テーブルやレコードなどの ScalarDB が定義するオブジェクトについて説明し、次にレコードの検索方法について説明します。
ScalarDB のオブジェクト
ScalarDB データモデルには、いくつかのオブジェクトがあります。
名前空間
名前空間は、SQL 名前空間またはデータベースに類似したテーブルのコレクションです。
テーブル
テーブルはパーティションのコレクションです。名前空間には、通常、それぞれが名前で識別される1つ以上のテーブルが含まれます。
パーティション
パーティションはレコードのコレクションであり、論理ノードまたは物理ノードへの分散単位です。したがって、同じパーティション内のレコードは同じノードに配置されます。ScalarDB では、複数のパーティションがハッシュによって分散されていると想定しています。
レコード / 行
レコードまたは行は、他のすべてのレコード間で一意に識別できる列のセットです。
列
列は基本的なデータ要素であり、これ以上細分化する必要はありません。各レコードは、1つ以上の列で設定されます。各列にはデータ型があります。データ型の詳細については、ScalarDB と他のデータベース間のデータ型マッピングを参照してください。
セカンダリインデックス
セカンダリインデックスは、単一の基本テーブル内の列のソートされたコピーです。各インデックスエントリは、対応するテーブルパーティションにリンクされています。ScalarDB は現在、複数列のインデックスをサポートしていないため、1つの列のみでインデックスを作成できます。
レコードの検索方法
このセクションでは、テーブルからレコードを検索する方法について説明します。
主キー
主キーは各レコードを一意に識別します。2つのレコードが同じ主キーを持つことはできません。したがって、主キーを指定してレコードを検索できます。主キーは、パーティションキーと、オプションでクラスタリングキーで設定されます。
パーティションキー
パーティションキーは、パーティションを一意に識別します。パーティションキーは、パーティションキー列と呼ばれる列のセットで設定されます。パーティションキーのみを指定すると、パーティションに属するレコードのセットを取得できます。
クラスタリングキー
クラスタリングキーは、パーティション内のレコードを一意に識別します。クラスタリングキー列と呼ばれる列のセットで設定されます。クラスタリングキーを指定する場合は、効率的な検索のためにパーティションキーを指定する必要があります。パーティションキーなしでクラスタリングキーを指定すると、すべてのパーティションをスキャンすることになり ます。すべてのパーティションをスキャンすると、特にデータ量が多い場合は時間がかかるため、自己判断でのみ実行してください。
パーティション内のレコードは、クラスタリング順序として指定されたクラスタリングキー列でソートされていると想定されます。したがって、定義された順序でクラスタリングキー列の一部を指定して、返される結果を絞り込むことができます。
インデックスキー
インデックスキーは、インデックス内のキーを検索してレコードを識別します。インデックスキーの検索はすべてのパーティションにまたがるため、特に検索の選択性が低くない場合は、必ずしも効率的であるとは限りません。
データベーススキーマの設計方法
データベーススキーマはリレーショナルモデルと同様に設計できますが、基本的な原則があり、従うべきベストプラクティスがいくつかあります。