2016-03-25 7 views
3

Wir wollten Aerospike als Cache für die Deduplizierung von Ereignis-IDs mit einer vordefinierten TTL verwenden.Aerospike als Deduplizierungscache

Unser Anwendungsfall ist sehr einfach: Für jedes Ereignis, das wir erhalten, möchten wir prüfen, ob diese Ereignis-ID im Cache vorhanden ist oder nicht. Wenn dies der Fall ist, möchten wir die TTL zurücksetzen (den Datensatz berühren) und dieses Ereignis in unserer Anwendung als Betrug markieren. Andernfalls möchten wir eine Put-Operation ausführen, um diese ID einzufügen.

Was wir planen, das zu tun, ist folgende:

(i) einen einzelnen Datensatz Namespace konfigurieren, da das einzige, was wir speichern wollen die ID ist. Wir werden die Ereignis-IDs als Schlüssel verwenden und NullValue als den entsprechenden Wert speichern. (Da brauchen wir wirklich nichts anderes als den Schlüsselwert).

(ii) Für die Deduplizierungsprüfung überprüfen wir zunächst client.exists() und führen dann eine Put-Operation mit RecordExistsAction.REPLACE in der write-Richtlinie durch (da diese für die Performance optimiert ist). Beide Operationen werden in einem operate() - Block für Atomarität aufgerufen.

Aber wir hatten ein paar Fragen zu den folgenden:

(i) In Bezug auf den Block arbeiten, diese Prüfung und stellen Transaktion, die wir wollen, scheint zu tun, eine sehr häufige Anwendungsfall zu sein. Gibt es eine API, die das auf eine sauberere Art und Weise erreicht? (Wir konnten nichts finden)

(ii) Ist es absolut notwendig, sogar einen einzigen Behälter zu haben? Wir möchten nur die Schlüssel und keinen entsprechenden Wert speichern. Mir ist klar, dass der Schlüsselwert niemals gespeichert wird und Aerospike nur den Digest speichert, aber da exists() die einzige Sache ist, die uns interessiert, gibt es eine Möglichkeit, den zusätzlichen Bin Storage Overhead loszuwerden?

Vielen Dank!

Antwort

3

(ii) Ist es absolut notwendig, nur einen einzigen Behälter zu haben? Wir möchten nur die Schlüssel und keinen entsprechenden Wert speichern. Mir ist klar, dass der Schlüsselwert niemals gespeichert wird und Aerospike nur den Digest speichert, aber da exists() die einzige Sache ist, die uns interessiert, gibt es eine Möglichkeit, den zusätzlichen Bin Storage Overhead loszuwerden?

Sie suchen nach data-in-index. Sie müssen einen Wert haben, keine Werte werden den Datensatz entfernen. Bei Daten im Index muss der Wert 8 Byte oder weniger betragen (Ganzzahlen werden oft verwendet).

Da Single-Bin zur Verwendung von Data-in-Index benötigt wird, wird ein großer Teil des Bin-Overheads eliminiert.

Verwandte Themen