3

2つのノードのcassandra(単純な)クラスターがあります。

カスタムメイドのダンプからの復元中に、次のような行がある場合に

del column_family['row_1'];
set column_family['row_1']['column1'] = '123';
set column_family['row_1']['column2'] = '456';
set column_family['row_1']['column3'] = '789';

...多くの場合、最初の列(column_1)は設定されません。

使用しました:

$ cassandra-cli -h cassandra.host.name -k keyspace_name -f dump_file

Debianホストでcassandra1.0.10を使用しています。

ダンプは常にドロップしてからキースペースを再作成するため、実行すると実際には空になります。実際、deleteステートメントは必要ありません。

削除しましたが、なぜこれが発生するのかまだわかりません。これは、このように設計されたものが原因であり、欠落しているだけだと思いますが、正確に何が「間違っている」のかを理解することはできません。

4

1 に答える 1

3

ここで起こっていることは、行のトゥームストーン(行の削除から)と1つ以上の列の書き込みのタイムスタンプが同じ値になることだと思います。Cassandra-cliは、タイムスタンプ値にミリ秒を使用するという一般的な規則に従っているため、削除と挿入がそのようにすぐに続く場合、それは非常に可能です。

挿入された列とトゥームストーンのタイムスタンプが同じである場合、トゥームストーンが優先されます。したがって、最初の列が表示されなくなることは理にかなっています。

ここでのあなたの場合、明示的なタイムスタンプで削除を書き込み、次にそのタイムスタンプに1を加えた他の列を書き込むことで問題は解決されます。この種のことは通常は必要ありませんが、これらの書き込みは、ユーザーがいつでも正しい結果を得ることができる状態で、それぞれが異なるCassandraノードに移動できるようにすることを目的としています。タイムスタンプは、競合解決メカニズムです。

于 2012-05-09T18:58:10.060 に答える