Cassandra Secondary index与Replication Factor:单分区存储节点问询
Cassandra二级索引数据存储节点分析
嘿,这个问题问到点子上了,刚好能帮你理清Cassandra二级索引的核心存储逻辑!咱们一步步拆解:
首先得明确Cassandra里二级索引的两种核心类型,以及它们对应的存储规则:
1. 本地二级索引(Local Secondary Index, LSI)
如果你的二级索引是本地索引(注意:LSI必须在创建表时就定义,无法通过事后CREATE INDEX命令添加),存储规则非常直接:
- 本地索引的条目和基表的分区数据同节点绑定存储。
- 你的基表分区
uniqueId='test'存储在192.168.1.1、192.168.1.2、192.168.1.3这三个节点上,那么这三个节点的每一个,都会独立维护该分区对应的二级索引条目。 - 简单总结:索引数据和基表分区数据完全共节点,也就是同样存储在192.168.1.1、192.168.1.2、192.168.1.3这三个节点。
2. 全局二级索引(Global Secondary Index, GSI)
如果你的二级索引是通过CREATE INDEX命令创建的(Cassandra 3.x及之后默认创建的就是GSI),情况会有所不同:
- GSI会生成一张独立的索引表,这张表的分区键是你创建索引的目标列的值,聚类列则是基表的分区键(也就是你的
uniqueId)。 - 索引表的存储节点是根据索引列的值计算token后,按照Keyspace的Replication Factor=3规则分配的,和基表分区的存储节点没有直接关联。
- 由于你的基表只有一个
uniqueId='test'的分区,索引表中只会有一条对应的条目。这条条目会存储在由索引列的值的token决定的3个节点上,这三个节点可能和基表的1.1、1.2、1.3完全不同,也可能有部分重叠,取决于索引列的值对应的token范围分配。
你可以通过执行DESCRIBE TABLE <表名>命令查看表结构,确认自己使用的是哪种索引类型。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

