1

私は NoSQL と BigTable を初めて使用し、スーパー カラムを使用して BigTable に適したスキーマを作成する方法 (および使用する必要がある場合) を学ぼうとしています。

NoSQL データ モデリングに関するこの記事に基づくと、JOIN 中心の RDBMS スキーマを使用する代わりに、データをより大きなテーブルに集約して、可能な場合は非正規化する必要があるように思えます。それに基づいて、Cassandra 用に作成しようとしている「ユーザー」用に想定した単純なスキーマを次に示します。

User: {
    KEY: UserId {
        name: {
           first, 
           last
        },
        age,
        gender
    }
};

キーが「UserID」である上記の列ファミリー (ユーザー) は、3 つの列 (名前、年齢、性別) で構成されます。その列「名前」は、「名」と「姓」で構成されるスーパー列になります。列。

だから私が求めているのは

  1. CQL 3.0は、その中に「名前」スーパー列を持つこの列ファミリ「ユーザー」を作成するように見えますか? 更新:これは可能ではないようです。)
  2. (このような) スーパー カラムを使用する必要がありますか? 他のものを使用する必要がありますか?
  3. このスキーマを表す別の方法は何ですか?
  4. テーブル/列ファミリーで値のリストを表すにはどうすればよいですか?

私が見つけたこれに関するいくつかの有用なリンクを次に示しますが、私の質問に答えるのに十分明確に理解していません:

ありがとう!

アップデート:

多くの研究の後、私はいくつかのことを学んでいます:

  • CQL を使用してスーパー カラムを作成することはできません。そうする他のメカニズムがあるかもしれませんが、CQL はそれらの 1 つではないようです。
  • SQL 3.0 の構文は、「COLUMN FAMILY」中心のアプローチから、SQL に似た「TABLE」ベースの構文に移行しているようです。

それに応じて質問を変更しました。

4

1 に答える 1

0

(このような) スーパー カラムを使用する必要がありますか? 他のものを使用する必要がありますか?

あなたが提案したそのデータモデルを使用できます。ただし、リンクに記載されているように、一般的にはこれらの理由からお勧めしません。

また、いくつかの欠点があるため、スーパー カラムの使用は一般的にお勧めできません。スーパー カラムのすべてのサブカラムは、1 つのサブ カラムを読み取るときにデシリアライズする必要があり、スーパー カラムにセカンダリ インデックスを設定することはできません。また、1 レベルのネストのみをサポートします。

したがって、あなたの状況のこれらの理由を考慮してください。

このスキーマを表す別の方法は何ですか?

複合列を使用してみることができます。詳細については、こちらをお読みください。または、おそらく標準の列ファミリーを使用することもできます。標準の cf が状況に適していると思います。たとえば、次の提案:

User : {
  key: userId {
    columnName:firstname
    ColumnName:lastname 
    ColumnName:age
    ColumnName:gender
    ColumnName:zip
    ColumnName:street
  }
  ..
};

テーブル/列ファミリーで値のリストを表すにはどうすればよいですか?

cf の BytesType にリストを格納することができます。または、リストを個々の要素に分割して CompositeType として保存することもできます。

于 2012-06-25T06:50:27.927 に答える