15

Cassandra の列に TTL があることは知っています。しかし、行に TTL を設定することも可能ですか? 次のユースケースに見られるように、各列に TTL を設定しても問題は解決しません。

ある時点で、プロセスが TTL で行全体を削除したいとします (TTL が 1 週間の行 "A" としましょう)。これは、既存のすべての列を同じ内容で TTL を 1 週間に置き換えることで実現できます。

ただし、その行「A」で同時に実行されている別のプロセスが存在する可能性があります。これは、新しい列を挿入するか、TTL なしで既存の列を置き換えます。そのプロセスは、行が削除されることを認識できないためです (同時に実行されます!)。そのため、1 週間後に行「A」のすべての列が、これらの新しく挿入されたものを除いて TTL のために削除されます。また、それらを削除してほしい。

では、このユース ケースに対する Cassandra のサポートはありますか、それとも、自分で何かを実装する必要がありますか?

敬具
ステファン

4

3 に答える 3

13

現在、Cassandra の行に TTL を設定する方法はありません。TTL は、書き込み時に有効期間がわかっている個々の列を削除するように設計されています。

1 週間の TTL を挿入するのではなく、1 週間後に実行して行を削除することで、プロセスを遅らせることで目的を達成できます。行の削除には、次のセマンティクスがあります。直前に挿入された列は削除されますが、直後に挿入された列は削除されません。

将来挿入される列を削除する必要がある場合は、将来のタイムスタンプを含む行削除を挿入してこれを確実にすることができますが、非常に注意してください。後でその行に挿入したい場合はできません。その行に書き込まれると消えます (tombstone がガベージ コレクションされるまで)。

于 2013-05-15T07:42:24.533 に答える
8

Cassandra 3 で行の ttl を設定するには、次を使用します。

INSERT INTO Counter(key,eventTime,value) VALUES ('1001',dateof(now()),100) USING ttl 10;
于 2016-08-22T09:04:14.103 に答える