1

特定の列ファミリーで後で列にインデックスを追加すると、履歴データもインデックスに追加されるか、インデックスを追加した後に現在のデータにインデックスが作成されます。

ここでは、列をセカンダリ インデックスとして更新した後、Cassandra DB のインデックス データはいつ実行 されますか?

列にインデックスを付けてCFを作成しようとしました(私はCassandra 1.0.7を使用しています)

comparison=UTF8Type および column_metadata=[{column_name: full_name, validation_class: UTF8Type}, {column_name: birthday_date, validation_class: LongType, index_type: KEYS}, {column_name: state, validation_class: UTF8Type, index_type: KEYS}] で列ファミリー ユーザーを作成します。 ;

いくつかのデータを追加してから実行しました

インデックス users.birth_date を削除してインデックスを削除し、CF を更新して元に戻しました

列ファミリーのユーザーを comparison=UTF8Type および column_metadata=[{column_name: full_name, validation_class: UTF8Type}, {column_name: birthday_date, validation_class: LongType, index_type: KEYS}, {column_name: state, validation_class: UTF8Type, index_type: KEYS}] で更新します。 ;

その後、いくつかのデータを再度追加しました

しかし、birth_data に対してクエリを実行すると、履歴データも取得されますか?

誰かがこれについて私の混乱を解消できますか? インデックスを作成するには、履歴データを使用する方法と使用しない方法の 2 つの方法がありますか?

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 は再度使用できるようにそれらをリンクしました。そうでなければ、それらを作成しようとしたでしょう。

セカンダリ インデックスが同期されているかどうかわからない場合は、次を使用できます。

nodetool rebuild_index
于 2014-02-10T21:03:56.313 に答える