2

次の質問があります: カサンドラで以下のような列ファミリーを作成することは可能ですか?また、その構造を定義する方法:

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

2 に答える 2

7

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

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).
于 2012-03-13T05:16:29.960 に答える
2

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

次に、電話番号で検索する場合は、key=phone number の自家製インデックスを作成し、次に各ユーザー ID の列を作成します。

これは、Cassandra ではかなり一般的なアプローチです。

于 2012-05-21T17:19:44.787 に答える