2017-03-05 143 views
1

好吧,我一直在寻找解释一段时间,但仍然找不到答案。卡桑德拉索引解释

当我们谈论卡桑德拉指数,我得到了要点,其上的是:

  • 做高或非常低的基数数据未使用

在低基数我明白了 - 搜索时我们会得到很宽的行。

但是,在高基数数据的幕后发生了什么?所有的书籍和博客似乎都复制了datastax的例子,它没有解释为什么,只是告诉你不要这样做。

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

  1. 要求所有节点,其中一个具有通过用户ID
  2. 从正确的分区与此相关的电子邮件
  3. 获得用户的用户ID

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

因此,请解释我从理解为什么在高基数数据上使用索引时错过了什么。

另外,关于相关主题:有没有一种情况,当索引比物化视图更优先?

回答

0

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

相反,如果你将不得不在下方建立

CREATE TABLE userid_by_email (
    email text PRIMARY KEY, 
    userid bigint 
); 

这样的一个表卡桑德拉将通过查询一台主机上返回用户ID。

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

0

总结: 使用索引,当你知道分区键,你需要做的是必须打的所有节点,或做的事计数的全文检索,例如,有多少次你见过发表在博客(有击中所有节点)的所有文章,你需要像一个特定的值:

WHERE age = 18 

使用物化视图,当你不知道分区键你需要的范围如下:

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