2016-03-25 26 views
3

事前定義されたTTLを使用して、イベントIDの重複排除のためのキャッシュとしてAerospikeを使用したかったのです。重複排除キャッシュとしてのAerospike

ユースケースは非常に簡単です:受信したすべてのイベントについて、このイベントIDがキャッシュに存在するかどうかを確認したいと思います。そうであれば、TTLをリセットし(レコードに触れる)、このイベントをアプリケーションで詐欺としてマークします。そうでなければ、このIDを挿入するput操作を行います。

は、私たちが行うことを計画していることは以下の通りです:私たちは保存したい唯一のことは、IDがあるため

(i)は、単一のレコードの名前空間を設定します。イベントIDをキーとして使用し、対応する値としてNullValueを格納します。 (キー値以外のものは本当に必要ないので)

(ii)重複チェックでは、最初にclient.exists()をチェックしてから書き込みポリシーでRecordExistsAction.REPLACEを使用してput操作を行います(これはパフォーマンスが最適化されているためです)。これらの操作は両方とも、アトミック性のための操作()ブロックで呼び出されます。

しかし、我々は次に関するいくつかのクエリた:

(I)で動作ブロックについては、私たちがしたい、このチェックとトランザクションセットは非常に一般的なユースケースのようです。よりクリーンな方法でこれを実現するAPIはありますか? (何も見つかりませんでした)

(ii)1つのビンも絶対に必要ですか?キーと対応する値は保存しないでください。私はキー値が保存されておらず、Aerospikeはダイジェストだけを保存していますが、exist()が気にする唯一のものなので、余分なビンストレージオーバーヘッドを取り除く方法はありますか?

ありがとうございました!

答えて

3

(ii)1つのビンも絶対に必要ですか?キーと対応する値は保存しないでください。私はキー値が保存されておらず、Aerospikeはダイジェストだけを保存していますが、exist()が気にする唯一のものなので、余分なビンストレージオーバーヘッドを取り除く方法はありますか?

あなたはdata-in-indexを探しています。あなたは値を持っている必要があります、値はレコードを削除しません。 index-in-dataでは、値が8バイト以下である必要があります(整数がよく使用されます)。

インデックス内のデータを使用するためにはシングルビンが必要なため、ビンのオーバヘッドの多くが排除されます。

関連する問題