标准柱族与超柱族

时间:2011-09-16 05:55:36

标签: cassandra

我读到的地方表明,对于标准列族中有数千列的行,更好的设计将它们分成超级列,这样,读取效率非常高,因为cassandra只需要加载和返回给定超级列名称下的列,而不是加载并可能返回列的thoudsands。有人可以确认一下吗?

2 个答案:

答案 0 :(得分:6)

这不是一个好建议。此时,超级列是最佳解决方案的用例非常少。对于大多数历史上使用的超级列,新的CompositeTypes是更好的解决方案。

话虽如此,听起来你也不需要在这里使用CompositeTypes。确实如果你正在阅读一个非常大的行,你不应该立刻撤回整行。相反,您应该在连续切片中获取行的部分。

基本上,您将执行一系列get_slice() s。对于第一个,将列计数设置为,例如1000,列开始为“”。然后,从该组结果中取出最后一个列名称(称之为X),并进行另一个列数为1000的get_slice()调用,但这次将列start设置为X.丢弃第一列返回(它将是X),然后重复整个get_slice()进程,直到查询返回少于1000列,这表示您已经到达行的末尾。

根据您的列大小,您可能希望一次获取超过或少于1000个。

答案 1 :(得分:0)

如果有多列或者数据应该被索引,那么最好创建一个普通的列族,因为:1)超级CF子列没有索引,2)任何子列的请求反序列化 all 超级列中的子列。但是,这可能是当前代码库中的限制,请参阅http://wiki.apache.org/cassandra/CassandraLimitations