卡桑德拉指数解释说

时间:2017-03-05 17:03:51

标签: cassandra

好的,我现在一直在寻找解释,但仍然无法找到答案。

当我们谈论Cassandra指数时,我得到了主要观点,其中包括:

  • 不要使用高基数或非常低基数的数据

在低基数上我得到它 - 在搜索时我们会得到非常宽的行。

但是高背景数据背后会发生什么?所有的书籍和博客似乎都复制了数据简介示例,该示例没有解释为什么,但只是告诉您不要这样做。

假设,我想在用户电子邮件上创建一个索引。如果我理解正确,当我通过电子邮件搜索用户时,会发生两件事:

  1. 询问所有节点,哪个节点具有与此电子邮件相关的用户ID
  2. 按用户ID
  3. 从正确的分区中获取用户

    如果我在用户国家/地区创建索引(这似乎是更合适的字段),算法应该是相同的。

    那么,请解释一下我在理解为什么在高基数数据上使用索引不好而遗漏的内容。

    另外,关于相关主题:是否存在索引比物化视图更优选的情况?

2 个答案:

答案 0 :(得分:0)

假设您在高基数列上创建索引,例如电子邮件 如果您通过电子邮件查询userid,cassandra需要在所有主机上执行该查询以获取该单个用户ID。您正在查询所有主机以获得单个用户ID,这是不是很昂贵?

相反,如果你要创建一个像

那样的表
        Date    A    B    C     D
1 01.01.2015 0.15 0.17 0.70  0.65
2 02.01.2015 1.01 0.75 0.01 -0.18
3 01.02.2015   NA 0.64 1.20  0.10
4 06.02.2015 0.12 0.54 0.13  1.50
5 01.03.2016 0.45 0.54 1.89  0.56

Cassandra将通过查询单个主机来返回用户标识。

这是你的另一个问题的答案https://stackoverflow.com/a/36476772/2320144

答案 1 :(得分:0)

总结: 当你知道分区键时使用索引,你需要进行必须命中所有节点的全文搜索,或者做一些事情,例如,你看过博客上发表的所有文章的次数(必须点击所有节点)你需要特定的值,如:

 WHERE age = 18

当您不知道PARTITION KEY时使用物化视图,您需要的范围如下:

WHERE age > 18 and age < 30

<强> 参考文献:

主要文章!

Cassandra Secondary Index Preview #1

这是与物化视图和二级索引的比较

Materialized View Performance in Cassandra 3.x

这里PK已知的地方使用索引更有效

Cassandra Native Secondary Index Deep Dive