1

如果在特定列族上我稍后在列上添加索引,它是否也会索引历史数据或添加索引后现在出现的数据。

此中,Cassandra DB 在将列更新为二级索引后何时索引数据 接受的答案说它将仅索引创建索引后插入的数据。

我尝试在列上创建带有索引的 CF。(我使用的是 Cassandra 1.0.7)

使用比较器=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 将其添加回来

使用比较器 = 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 时,我也得到了历史数据吗?

有人可以解决我对此的困惑吗?是否有两种方法可以创建索引,一种使用历史数据,一种没有?

4

1 回答 1

1

也许以前版本的 Cassandra 没有为历史数据构建索引,但是根据 Cassandra 1.2 后的代码,如果添加二级索引,索引创建是一个异步过程,确实会在历史数据上发生:

https://github.com/apache/cassandra/blob/cassandra-1.2.15/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java#L240

在您的场景中,发生的事情是您删除了索引并添加了索引。因为旧的索引文件已经加载并且没有从磁盘中删除,Cassandra 再次链接它们以供使用。否则,它会尝试创建它们。

如果您不确定您的二级索引是否同步,您可以使用:

节点工具rebuild_index
于 2014-02-10T21:03:56.313 回答