2

我有下一个问题:是否可以在 cassandra 中创建如下所示的列族以及如何定义它的结构:

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

四个级别的超级列中嵌套的超级列?据我所知,这是不可能的。因为您需要通过引用您希望它是当前插入的哪个列族来指定。考虑以下情况,您可以将顶级列族定义为超级列族。然后你可以在这个超级列族中拥有多个超级列,这个超级列将有多个列=值对,它们被称为子列。例如,

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 表示(或您想要使用的任何序列化)。

然后,如果您想通过电话号码查找,您将有一个 key=phone number 的本地索引,然后是每个用户 ID 的列。

这是 Cassandra 的一种非常常见的方法。

于 2012-05-21T17:19:44.787 回答