Cassandra 标准柱族与超级柱族

Cassandra 标准柱族与超级柱族,cassandra,Cassandra,我在某个地方读到,对于一个标准列族中有数千列的行,更好的设计是将它们拆分为超级列,这样,读取将非常高效,因为cassandra只需要加载并返回给定超级列名下的列,而不是加载并可能返回柱的Thouddsands。谁能确认一下吗?这不是个好建议。在这一点上,超级列是最佳解决方案的用例非常少。新的CompositeTypes是一个更好的解决方案,用于历史上使用的大多数超级列 话虽如此,听起来这里也不需要CompositeTypes。确实,如果你正在阅读一个非常大的一行,你不应该一次把整行都往后拉。相反

我在某个地方读到,对于一个标准列族中有数千列的行,更好的设计是将它们拆分为超级列,这样,读取将非常高效,因为cassandra只需要加载并返回给定超级列名下的列,而不是加载并可能返回柱的Thouddsands。谁能确认一下吗?

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

话虽如此,听起来这里也不需要CompositeTypes。确实,如果你正在阅读一个非常大的一行,你不应该一次把整行都往后拉。相反,您应该获取连续切片中的部分行

基本上,您将执行一系列
get\u slice()
s。对于第一个,将列计数设置为1000,并将列开始设置为“”。然后,从这组结果中取最后一个列名(称为X),并使用1000列计数进行另一个
get_slice()
调用,但这次,将列start设置为X。丢弃返回的第一列(将是X),然后重复整个
get_slice()
过程,直到查询返回的列数小于1000列,这表明你已经到了最后一排


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

如果有许多列或数据需要索引,则最好创建一个普通列族,因为:1)超级CF子列没有索引,和2)对子列的任何请求都会反序列化超级列中的所有子列。但是,这可能是当前代码库中的一个限制,请参见

注意,返回少于1000列的查询可能并不表示结束。根据我的经验,我有时会得到较少的列返回。你应该一直读到它返回零。无论如何,可能是一个更简单的算法。另外,我很高兴您指定要读取的行数应该取决于列的大小。我经常只使用100,因为我的一些列有大量的数据。具有多个列的CQL
CREATE TABLE
和超级列之间有什么区别?因为这感觉和我一样。。。