8

CQL3を使用してCassandraのマップ内の要素のTTL値を選択する方法はありますか?

私はこれを試しましたが、うまくいきません:

SELECT TTL (mapname['element']) FROM columnfamily
4

1 に答える 1

3

残念ながら、Cassandra 1.2 および CQL3 の時点では不可能だというのが答えだと確信しています。コレクションの個々の要素を照会することはできません。このブログ エントリにあるように、「コレクション全体を取得することしかできません」。ただし、コレクション要素を照会する機能も欲しいです。

コレクション内の個々の要素の TTL を引き続き設定できます。TTL がコレクション要素の何らかの値であることを確認したい場合は、コレクション全体を読み取ってから、目的の TTL でコレクション (全体または選択したいくつかの要素) を更新できます。または、個々のデータの TTL を絶対に知る必要がある場合は、スキーマをコレクションから、TTL クエリが確実に機能する古き良き動的列に戻す必要があるかもしれません。

または、コレクションの TTL を保持する別の列をスキーマに追加することも考えられます。例えば:

CREATE TABLE test (
  key text PRIMARY KEY,
  data map<text, text>,
  data_ttl text
) WITH ...

次に、「data」を更新するたびに列「data_ttl」を常に更新することで、マップ列「data」全体の TTL を追跡できます。次に、他の列と同じように「data_ttl」をクエリできます。

SELECT ttl(data_ttl) FROM test;

これらの解決策はどれも完璧ではないことに気づきました...私も、何が自分にとって最も効果的かをまだ理解しようとしています.

于 2013-10-24T16:03:41.993 に答える