1. 序章

Apache Cassandra は、複数のデータセンターにまたがる大量のデータを処理するために構築されたオープンソースの分散型NoSQLデータベースです。 Cassandraのデータモデルは、複数のドキュメントや論文にまたがる議論のトピックであり、多くの場合、混乱したり矛盾した情報をもたらします。 これは、Cassandraが列ファミリーを個別に格納およびアクセスできるため、列ファミリーではなく列指向として誤って分類されるためです。

このチュートリアルでは、データモデル間の違いを確認し、Cassandraのパーティション化された行ストアデータモデルの性質を確立します。

2. データベースデータモデル

Apache Cassandra gitrepoREADMEには、次のように記載されています。

Cassandra is a partitioned row store. Rows are organized into tables with a required primary key.

Partitioning means that Cassandra can distribute your data across multiple machines in an application-transparent matter. Cassandra will automatically repartition as machines are added and removed from the cluster.

Row store means that like relational databases, Cassandra organizes data by rows and columns.

このことから、Cassandraはパーティション化された行ストアであると結論付けることができます。 ただし、以下で説明するように、column-familyまたはwide-columnも適切な名前です。

列ファミリーデータモデルは、列指向モデルと同じではありません。 column-family データベースは、すべての列ファミリーを含む行を格納しますが、 column-directed データベースは、データテーブルを行ではなく列ごとに格納するだけです。

2.1. 行指向および列指向のデータストア

例としてEmployeesテーブルを取り上げましょう。

  ID         Last    First   Age
  1          Cooper  James   32
  2          Bell    Lisa    57
  3          Young   Joseph  45

行指向データベースは、上記のデータを次のように格納します。

1,Cooper,James,32;2,Bell,Lisa,57;3,Young,Joseph,45;

列指向のデータベースは、データを次のように格納します。

1,2,3;Cooper,Bell,Young;James,Lisa,Joseph;32,57,45;

Cassandraは、行指向または列指向データベースのようにデータを保存しません。

2.2. パーティション化された行ストア

Cassandraはパーティション化された行ストアを使用します。これは、行に列が含まれることを意味します。 column-family データベースは、値にマップされたキーと複数の列ファミリーにグループ化された値を持つデータを格納します。

パーティション化された行ストアでは、Employeesデータは次のようになります。

"Employees" : {
           row1 : { "ID":1, "Last":"Cooper", "First":"James", "Age":32},
           row2 : { "ID":2, "Last":"Bell", "First":"Lisa", "Age":57},
           row3 : { "ID":3, "Last":"Young", "First":"Jospeh", "Age":45},
           ...
     }

パーティション化された行ストアには列を含む行がありますが、各行の列数は同じである必要はありません big-table など)。 一部の行には数千の列が含まれる場合がありますが、一部の行は1つだけに制限される場合があります。

パーティション化された行ストアは、 2次元のKey-Valueストアと考えることができます。ここでは、行キーと列キーを使用してデータにアクセスします。 データの最小単位(列)にアクセスするには、最初に行名(キー)を指定し、次に列名を指定する必要があります。

3. 結論

この記事では、カサンドラのパーティション化された行ストアそれは列指向ではなく列ファミリー 。 を定義する主な特徴カラムファミリーそれは列情報はの一部ですデータ 。 これが、列ファミリーモデルと行指向および列指向モデルの主な違いです。 wide-column という用語は、無制限の数の列を保持するテーブルは本質的に幅が広いという考えに由来しています。

また、column-familyデータストアの行が列名や列番号を共有する必要がないことも確認しました。 これにより、スキーマフリーまたは半構造化テーブルが有効になります。