【发布时间】:2018-07-01 00:51:54
【问题描述】:
我尝试使用以下链接了解 Cassandra 中的二级索引:
假设我们有 5 个节点 N1、N2、N3、N4 和 N5 集群,复制因子为 3,这意味着分区数据将被复制到集群中的 3 个节点(例如 N1、N2 和 N3)。
现在当我执行这个查询时:
SELECT *
FROM user
WHERE partitionKey = "somedata" AND ClusteringKey = "test";
读取一致性为“2”
它将从节点 N1、N2 或 N3 中的任意两个节点查询
如果我在任何列上应用二级索引,以下查询将执行多少个节点?
SELECT *
FROM user
WHERE partitionKey = "somedata" AND secondaryKey = "test";
我有两个查询:
- 根据视频,上面对二级索引的查询会从集群中的所有5个节点中读取,以便在secondaryIndexColumn上进行搜索?这是正确的吗?
- 使用二级索引是否会对性能产生任何其他影响? - 如果能解释原因就好了
【问题讨论】:
-
你通过
partitionKey查询,所以Cassandra已经知道要查询哪些节点了,不是吗? -
不,如果我不使用二级索引,根据视频,他提到如果我们使用二级索引,那么它会在复制因子的所有节点上进行查询,而不考虑读取一致性。这是真的吗?你试过这个吗?
-
原来如此。使用辅助键意味着对它们运行查询。例如
SELECT * FROM users WHERE secondary_key = 12345;这将是一个分散收集。按分区键查询还是会使用主键,忽略二级索引。 -
二级索引是该特定节点的本地索引。如果按二级索引键查询,查询引擎不知道这些键值存在于何处以及在哪些节点上。
-
RC 只需要启动并运行至少两个节点。但是,如果您通过二级索引搜索查询,就像询问集群在哪里可以找到这些数据,因为我没有通过主键搜索。然后,它在该列上创建索引并为您提供来自所有可能节点的数据,这会降低性能
标签: cassandra cql cassandra-3.0