表格ID何时更改

时间:2019-07-19 17:15:34

标签: cassandra cassandra-3.0

system_schema.tables和数据目录中记录的表ID何时更改,Cassandra如何读取目录以获取最新架构

查看数据目录cd $ CASSANDRA_DATA / keyspace /,我看到两个目录

drwxr-xr-x 4个cassandra用户4096年6月27日20:47 deviceData-c31406e0eda011e88cce75b7a7f02232

drwxr-xr-x 3个cassandra用户4096年6月30日15:22 deviceData-a0ba3490f28511e88cce75b7a7f02232

查询表架构时,我看到

select keyspace_name, table_name, id from system_schema.tables where keyspace_name='devices' ;

keyspace_name | table_name | id
------------------------------------------------------------------------------
devices | deviceData | a0ba3490f28511e88cce75b7a7f02232

所以我的问题是:导致id改变的原因(它是alter statement),以及C *如何决定使用哪种结构。

2 个答案:

答案 0 :(得分:1)

应该只有一个,但是如果您删除表并重新创建它,将会有第二个表ID。

如果在不同的节点上同时调用CREATE TABLE,它们可能会使用一个表ID创建它,然后与其余集群模式融合并切换到新的表ID,则也存在竞争情况。如果您在日志中看到任何cfid不匹配错误,则启动群集会解决此问题。有计划在将来的版本中修复此问题,但3.x仍然像这样卡住。

答案 1 :(得分:0)

一个表在整个生命周期中只有一个UUID(和一个tablename-UUID目录)。执行表创建语句时,会在协调器节点上分配UUID。这些目录在处理模式更改通知时在副本上创建。

在删除表并使用相同的名称重新创建后,可以获得不同的tablename-UUID目录。一次只有一个具有给定名称的表处于活动状态。

如果尝试同时在两个不同的节点上创建具有给定名称的表,则也可以以两个目录结尾。不过,您不应该尝试这样做(https://github.com/scylladb/scylla/issues/420

Reference