卡桑德拉索引解释
问题描述:
好吧,我一直在寻找解释一段时间,但仍然找不到答案。卡桑德拉索引解释
当我们谈论卡桑德拉指数,我得到了要点,其上的是:
- 做高或非常低的基数数据未使用
在低基数我明白了 - 搜索时我们会得到很宽的行。
但是,在高基数数据的幕后发生了什么?所有的书籍和博客似乎都复制了datastax的例子,它没有解释为什么,只是告诉你不要这样做。
假设我想在用户电子邮件上创建一个索引。如果我理解正确的,当我搜索用户通过电子邮件,两件事情将会发生:
- 要求所有节点,其中一个具有通过用户ID 从正确的分区与此相关的电子邮件
- 获得用户的用户ID
如果我在用户国家(这似乎是更合适的字段)创建索引,算法应该是相同的。
因此,请解释我从理解为什么在高基数数据上使用索引时错过了什么。
另外,关于相关主题:有没有一种情况,当索引比物化视图更优先?
答
假设您在电子邮件等高基数列上创建索引。
如果您通过电子邮件查询用户标识,cassandra需要在所有主机上执行该查询才能获得该用户标识。你正在查询所有主机以获得一个用户ID,是不是很昂贵?
相反,如果你将不得不在下方建立
CREATE TABLE userid_by_email (
email text PRIMARY KEY,
userid bigint
);
这样的一个表卡桑德拉将通过查询一台主机上返回用户ID。
这里是你的另一个问题的答案https://*.com/a/36476772/2320144
答
总结: 使用索引,当你知道分区键,你需要做的是必须打的所有节点,或做的事计数的全文检索,例如,有多少次你见过发表在博客(有击中所有节点)的所有文章,你需要像一个特定的值:
WHERE age = 18
使用物化视图,当你不知道分区键你需要的范围如下:
个WHERE age > 18 and age < 30
参考文献:
主要文章!
•Cassandra Secondary Index Preview #1
这里是与物化视图和二级指标
•Materialized View Performance in Cassandra 3.x
这里是哪里的PK是已知的比较,更有效地使用索引