table id什么时候变

When does table id changes

table记录在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

查询 table 架构时,我看到

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

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

所以我的问题是:是什么导致 id 改变(是 alter 语句)以及 C* 如何决定使用哪个结构。

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

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

如果您尝试在两个不同的节点上同时创建具有给定名称的 table,您也可能会得到两个目录。不过你不应该尝试这样做 (https://github.com/scylladb/scylla/issues/420)

Reference

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

如果您在不同的节点上同时调用 CREATE TABLE,他们可能会使用一个 table id 创建它,然后与集群模式的其余部分融合并切换到新 table ID。如果您在日志中看到任何 cfid 不匹配错误,弹跳集群将解决此问题。有计划在未来的版本中解决这个问题,但 3.x 仍然卡在这个地方。