2016-04-08 14 views
3

私はAerospikeでPOCをやっています。それは1つを除いて私のすべてのニーズに合うようです。レコードにTTLを設定すると、TTLが予期したとおりに期限切れになると期限切れになりますが、レコードが追い出されているときに航空スパイクで通知する必要があります。それも可能ですか?Aerospike TTLリスナー

答えて

4

あなたはUDFで、レコードのTTLを取得し、スケルトンUDFがここに与えられている現在の時刻

に比較することができます:

ローカル関数get_metadata(REC) リターンrecord.ttl(REC); エンド

https://discuss.aerospike.com/t/how-to-query-the-metadata-such-as-ttl-of-record-from-tools/916

私はあなたが定期的にすべての単一のレコードのためにそれをやっている場合、これは重く、かなりのリソースだろう疑うが、そう頻繁にUDFは、すべてのアプリケーションの実行を持っており、レコードがあるときに通知をpingすることが可能です有効期限近く。

より一般的なレベルでは、NSUPのログをgrepできます(これは有効期限と退去を処理するサブシステムです)、NSUPがレコードを削除する時期を示す明確なログメッセージがあります。

4

Aerospikeはあなたのためにこれを行うことはありません。定期的なスキャンジョブを実行することで実行できます。スキャンポリシーでは、includeBinDataをfalseに設定できます。これは、レコードのメタデータのみを返すので、非常に効率的なスキャンになります。メタデータでは、ttlをチェックして期限切れになる完全なレコードを読み取ることができます。

1

Aerospikeにご関心をお寄せいただきありがとうございます。 Aerospikeはどのようにあなたに通知しますか?

私たちはこの要求を長年にわたって持ち、実装を検討しています。分散システムには多くの問題があります。

たとえば、ログファイルエントリを特別な「有効期限ファイル」に書き込むことができます。もちろん、このデータはサーバーがクラッシュしたときに失われる可能性があるため、冗長ではありません。

もう1つのメカニズムは、キューに挿入するか、ネットワークイベント(REST呼び出し)を実行することです。これには、通知がドロップされないようにするための分散ログも必要です(Aerospikeはデータセンターの機能と同じです)。

このように、私はあなたが望む通知メカニズムの種類に興味があります。

Ben Bates氏の提案では、スキャンUDF機能を使用してこの種のUDFスキャンに有効期限を移動します。次に、UDFで通知することもできます。これはうまくいくはずですが、TTLをビンに入れ、標準のTTLメカニズムを使用しないでください。これは確かに、Cの標準TTLメカニズムよりも効率的ではありませんが、必要なものを提供する可能性があります。

+0

REST呼び出しが優れています。 –

+1

レディスと比較してください。イベント通知を有効にしてRedisを開始することができます。また、Redisサーバーに通知するイベントの種類(書き込み、読み取り、有効期限など)を設定することができます。サーバーを購読できます。イベントハンドラがトリガされます。このようなものは、エアロスピークに非常に役立ちます。私はaerospikeの使用を検討していますが、これは私にとって必須条件で、何が期限切れになるかを確認するたびにクエリを作成する代償を払うことはできません。それは性能が良くなく、アマチュアの解決策です。 –

+0

@CesarVillasanaまあ、誰かが定期的に鍵が期限切れになっているかどうかをチェックしなければならないし、それがDBやクライアント側で行われたとしても、それは最適ではない。Redisは半受動的なキーの有効期限を実装しています。これは、期限切れではなく、キーが削除された後にのみ有効期限イベントを取得する理由です。 – spektom