【问题标题】:standard column family vs super column family标准柱族与超级柱族
【发布时间】:2016-03-01 10:14:03
【问题描述】:

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

【问题讨论】:

    标签: cassandra


    【解决方案1】:

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

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

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

    您可能希望一次获取多于或少于 1000 个,具体取决于您的列大小。

    【讨论】:

    • 请注意,返回少于 1,000 列的查询可能不会表示结束。根据我的经验,我有时会返回更少的列。您应该阅读直到它返回零。无论如何可能是一个更简单的算法。另外,我很高兴您指定要读取的行数应取决于列的大小。我经常只使用 100,因为我的一些列有大量数据。
    【解决方案2】:

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

    【讨论】:

    • CQL CREATE TABLE 多列和超级列有什么区别?因为感觉和我一样……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多