4

キーと値のペアを Cassandra に保存し、固定のストレージ サイズに達するとエントリを LRU 方式で自動的に削除したいと考えています。

Cassandraを使用してこれを行うことは可能ですか?もしそうなら、それを行うための最良の方法は何でしょうか. そうでない場合、すべてのデータをメモリに保持する必要がなく、このユースケースをサポートする分散ストレージ システムは他にありません。

4

2 に答える 2

2

簡単に言えば、いいえ、Cassandra はそのままでは LRU をサポートしていません。

どうしてもやりたい場合は、Cassandra 上のアプリに LRU レイヤーを構築して、同じ効果を実現できます。これはいくつかの方法で実行できますが、一般的には、統計情報やタイムスタンプと共にキャッシュ オブジェクトの個別のインデックスを維持し、必要に応じてアプリでオブジェクトを消去する必要があります。それでも、Cassandra がデータを保存し、更新、削除などを管理する方法の性質上、ディスク容量は適切な上限にはなりません。データは後で削除されます (削除について)。

カスタム キャッシング レイヤー (つまり、Cassandra 内) を構築する利点の 1 つは、単純な LRU エビクションを超えて、より高価なオブジェクトや、より頻繁に (ただし最近ではなく) 使用されるオブジェクトをより重く重み付けして、それらが残ります。 LRU によってパージされる可能性がある場合でも、キャッシュが長くなります。これが役立つかどうかは、特定のユースケースに完全に依存します。しかし、繰り返しますが、Cassandra は大量のデータ チャーンによって肥大化する可能性があり、クラスターが適切に調整され、定期的なメンテナンスを受けていることを確認する必要があります。

実際には、ほとんどの場合、このユース ケースをサポートするために Memcache (または同様のもの) をデプロイします。

于 2014-03-14T02:31:50.327 に答える
0

Cassandra は LRU として使用できます。必要なのは、TTL を使用するか、削除を自分で管理することだけです。

新しいデータは常に追加されます。削除されたデータは、削除済みとしてのみマークされ、圧縮中に物理的に削除されます。圧縮を微調整する必要があるかもしれません。

Cassandra の利点は、データが入った瞬間に保持されること、極端なユース ケースを除いてすべてのデータをメモリに収める必要がないこと、データを失わないようにレプリケーションを使用できること、複数の言語からアクセスできることです。新しいデータがすぐに利用できない場合があることに注意してください。

より軽量なアプローチは Redis です。

于 2016-07-07T15:49:18.600 に答える