【问题标题】:Cassandra Partition and Cluster Keys to Store Inverted indexCassandra 分区和集群键存储倒排索引
【发布时间】:2017-03-08 20:45:56
【问题描述】:

我需要使用Cassandra来存储一个倒排索引,其中的单词及其在文章中出现的频率存储如下:

word, article_title, frequency

唯一词数约为 40M,Cassandra 节点数 = 2。 使用单词的第一个字符作为分区键或单词本身哪个更好? 主键呢?

【问题讨论】:

  • 很难说不知道该表将服务的查询。
  • 查询是这样的:select * from reverse_index which word in (word1, word2, ...);
  • 你看过 sasi 索引吗?
  • 我只是看着他们。其实我认为我不需要创建索引

标签: cassandra inverted-index


【解决方案1】:

TL;DR:关于您的查询,我肯定会说使用该词作为分区键。

如果您只使用第一个字符,您将只有 26 个分区。你不希望这样,如果有的话,你会得到热点。有些行会很短,因为没有很多以特定字母开头的单词,而其他行会非常非常长,甚至可能超出使用性能的程度。是的,Cassandra 每行有 20 亿列的限制,但建议将行的大小保持在数百万。如果您只想要“AIRPORT”,您也不想访问所有以“A”开头的单词。

您需要一个高度随机、尽可能随机的分区键,以便行轻松分散在整个集群中。另一方面,它必须反映您的访问模式。在您的情况下,您不会看到一个单词或一组单词的统计信息。通过 partition/primary 访问基本上和 Cassandra 一样快。

至于聚类键,或多或少是显而易见的,您可以使用文章标题,或者,我实际上会使用文章标识符(UUID 之类)作为聚类键。文章标题可能会更改(错字?),您当然不想遍历更改标题的所有行。

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2014-09-16
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多