Cassandra分区原理解析及跨表同Token分区存储疑问
Cassandra分区与数据存储问题解答
相同Token不代表处于同一个物理分区
虽然两张表中相同分区列值生成的Token完全一致,但它们并不属于同一个物理分区。Token的作用是确定数据在集群中的存储节点,相同Token的不同表数据会被路由到同一个节点(或节点副本组),但在节点内部,不同表的数据是完全隔离存储的,分属各自表的独立分区。
Cassandra内部数据存储机制
- Token路由逻辑:Cassandra将整个集群的Token值划分为连续区间,每个区间对应一个负责存储的节点(或副本组)。分区键的Token值决定了数据会被路由到哪个节点组,但这只是路由依据,不涉及数据的合并存储。
- 表级隔离存储:每个表拥有独立的存储结构,即使分区键Token相同,不同表的分区数据会被存储在节点的不同目录或SSTable(Sorted String Table)文件中,彼此完全独立,不会共享存储区域。
- 底层存储结构:Cassandra用SSTable作为持久化存储格式,每个表的SSTable单独存放,且内部按Token排序,保证查询时能快速定位到目标分区数据。
示例代码与结果
Create table table1 (emp_id int PRIMARY KEY, name text, role text); Create table table2 (emp_id int PRIMARY KEY, name text, role text); INSERT INTO table1(emp_id, name, role) VALUES (1, 'sahil', 'MTS'); INSERT INTO table2(emp_id, name, role) VALUES (1, 'sahil', 'MTS'); SELECT token(emp_id) from table1 where token(emp_id) = token(1); system.token(emp_id) ---------------------- 7447223576279188802 SELECT token(emp_id) from table2 where token(emp_id) = token(1); system.token(emp_id) ---------------------- 7447223576279188802
上述示例中,两条记录的Token相同,说明它们会被路由到同一个节点,但在该节点内,它们分别属于table1和table2的独立分区,存储在各自的SSTable文件中,彼此互不干扰。
内容的提问来源于stack exchange,提问作者Sahil Ummer
相关产品推荐
相关产品推荐

