如果在特定的列族中,我稍后会在列上添加索引,它也将索引历史数据或者在添加索引后立即生成数据。
此处When does Cassandra DB index data after updating a column as secondary index 接受的答案表明它只会索引创建索引后插入的数据。
我尝试在列上创建带索引的CF。(我正在使用Cassandra 1.0.7)
使用comparator = UTF8Type创建列族系列用户 和column_metadata = [{column_name:full_name,validation_class:UTF8Type}, {column_name:birth_date,validation_class:LongType,index_type:KEYS}, {column_name:state,validation_class:UTF8Type,index_type:KEYS}];
添加了一些数据,然后
逐条删除索引users.birth_date 然后通过更新CF
将其添加回来使用comparator = UTF8Type更新列族系列用户 和column_metadata = [{column_name:full_name,validation_class:UTF8Type}, {column_name:birth_date,validation_class:LongType,index_type:KEYS}, {column_name:state,validation_class:UTF8Type,index_type:KEYS}];
然后再添加一些数据
但是当我在查询birth_data时,我也得到了历史数据?
有人可以清楚我对此的困惑吗? 有两种创建索引的方法,一种是历史数据,一种是没有?
答案 0 :(得分:1)
也许以前版本的Cassandra没有为历史数据构建索引,但根据Cassandra 1.2的代码,索引创建是一个异步过程,如果添加二级索引,它会在历史数据上发生:
在您的方案中,发生的情况是您删除了索引并添加了索引。由于旧的索引文件已经加载但未从磁盘中删除,因此Cassandra将它们连接起来再次使用。否则,它会尝试创建它们。
如果您不确定二级索引是否同步,可以使用:
nodetool rebuild_index