2012-03-12 12 views
2

は、私は次の質問を持っている:それは以下のようになりますカサンドラの列ファミリを作成することが可能であり、それは構造だ方法を定義するには:4つのレベルのためにカサンドラとsupercolumns

Users = { //CF 
    AlexS : { //row key 
     Address : { //supercolumn 
       state: "NJ", 
       country: "US", 
       phone : { //super column 
        zip: "00283", 
        number : { // supercolumn 
         home: "23756511", 
         mobile : "23756512" 
        } 
       } 
     } 
    } 
} 

答えて

7

ネストされたスーパーコラムスーパー列内の?私が知る限り、それは不可能です。その現在の挿入のどの列ファミリを参照するかによって指定する必要があるためです。次のことを考慮して、最上位の列ファミリを列ファミリのスーパーであると定義することができます。次に、スーパーカラムファミリ内に複数のスーパーカラムを持つことができます。このスーパーカラムは、サブカラムと呼ばれる複数のカラム=値のペアを持ちます。例えば、

list Users;  
Using default limit of 100 
------------------- 
RowKey: AlexS 
=> (super_column=Address, 
    (column=country, value=US, timestamp=1331614891360000) 
    (column=state, value=NJ, timestamp=1331614891355000)) 
=> (super_column=number, 
    (column=home, value=23756511, timestamp=1331614891406000) 
    (column=mobile, value=23756512, timestamp=1331614891406001)) 
=> (super_column=phone, 
    (column=zip, value=00283, timestamp=1331614891396000)) 

1 Row Returned. 
Elapsed time: 21 msec(s). 
+1

これは可能な+ドキュメントではないので、これは本当に不可能だと考えています。そのため、スタンダードとスーパーの2種類のカラムファミリしか使用できません。スーパータイプの列ファミリは、サブカラムを保持するためにトップレベルの列を追加します。 – Kitamo

+0

はい、おそらく今、時間の中でおそらくそれはサポートになるでしょう。スーパータイプの列ファミリを宣言し、多くの標準列ファミリを含みます。各標準列ファミリでは、多くのcolumnNameおよびcolumnValueを格納します。 – Jasonw

+1

キーにコンポジットタイプを使用し、AlexS:Address、AlexS:number、Alexs:phoneなどの3つの別個のキーを持ち、SuperColumnsを避けることができます。 1つの利点は、任意の列のインデックスを追加することができます(標準CFでのみ利用可能) – libjack

2

は、さらに別のオプションは、それはあなたがそれを表現している方法なので、JSONとして一部またはユーザエンティティのすべてを格納することです。逆引き参照を行う必要がある場合は、独自のインデックスを作成してください。その場合、あなたのキーは「AlexS」です。次に、アドレスデータのJSON表現(または使用するシリアル化)を含む「Address」列があります。

次に、電話番号で検索する場合は、自宅で索引を作成し、キー=電話番号、次に各ユーザーIDの列を作成します。

これは、カサンドラではかなり一般的なアプローチです。