2016-04-08 9 views
3

Ich mache eine POC mit Aerospike. Es scheint alle meine Bedürfnisse außer einem zu erfüllen. Wenn ich eine TTL auf einen Datensatz setze, läuft sie ab, nachdem der TTL wie erwartet abgelaufen ist, aber ich habe eine Anforderung, wo Aerospike mich benachrichtigen soll, wenn ein Datensatz gelöscht wird. Ist das überhaupt möglich?Aerospike TTL Hörer

Antwort

4

Sie können die Aufzeichnung TTL mit einem UDF erhalten und

Ein Skelett UDF hier gegeben wird auf die aktuelle Zeit vergleichen:

lokale Funktion get_metadata (rec) return record.ttl (rec); Ende

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

Ich vermute, das ist ziemlich Ressource schwer sein würde, wenn Sie es für jeden einzelnen Datensatz regelmäßig tun, aber es ist möglich, die Anwendung laufen zu haben, die UDF jeder so oft und eine Benachrichtigung ping, wenn der Datensatz kurz vor Ablauf. Wenn Sie auf eine allgemeinere Ebene schauen, können Sie die Protokolle für NSUP grep (dies ist das Subsystem, das Ablauf und Räumung behandelt) und es gibt eine klare Protokollmeldung, die angibt, wann NSUP Datensätze entfernt.

4

Aerospike wird dies nicht für Sie aus der Box tun. Sie können dies tun, indem Sie einen periodischen Scan-Job ausführen. In der Scan-Richtlinie können Sie includeBinData auf false festlegen. Dies ist ein sehr effizienter Scan, da nur die Metadaten der Datensätze zurückgegeben werden. In den Metadaten können Sie das TTL überprüfen und die vollständigen Datensätze lesen, die demnächst ablaufen.

1

Vielen Dank für Ihr Interesse an Aerospike. Wie möchten Sie, dass Aerospike Sie benachrichtigt?

Wir haben diese Anfrage seit langer Zeit und haben Implementierungen in Betracht gezogen. In einem verteilten System gibt es eine Reihe von Problemen.

Zum Beispiel könnten wir einen Protokolldateieintrag in eine spezielle "Ablaufdatei" schreiben. Natürlich können diese Daten verloren gehen, wenn ein Server abstürzt, also nicht redundant ist.

Ein anderer Mechanismus wäre, in eine Warteschlange einzufügen oder ein Netzwerkereignis (REST-Aufruf) durchzuführen. Dies erfordert auch ein verteiltes Protokoll, um sicherzustellen, dass Benachrichtigungen nicht gelöscht werden (was Aerospike mit seiner Cross-Datencenter-Funktion macht).

So interessiert mich die Art von Benachrichtigung Mechanismus, die Sie möchten.

Die von Ben Bates vorgeschlagene Methode verwendet die Funktion Scan UDF, um den Ablauf in diese Art von UDF-Scan zu verschieben. Dann können Sie in der UDF auch benachrichtigen. Dies sollte funktionieren, aber Sie müssen die TTL in einen Behälter legen und nicht den Standard-TTL-Mechanismus verwenden. Dies ist sicherlich weniger effizient als der Standard-TTL-Mechanismus in C, kann aber das liefern, was Sie brauchen.

+0

Ein REST-Anruf wäre großartig. –

+1

Bitte vergleichen Sie mit Redis. Sie können mit den Ereignisbenachrichtigungen erneut starten und Sie können konfigurieren, welche Ereignistypen der Redis-Server benachrichtigen soll (z. B. schreiben, lesen, ablaufen usw.). So können Sie Ihren Server abonnieren und wenn etwas passiert, wird Ihr Event-Handler wird ausgelöst. So etwas wäre für Aerospike sehr nützlich. Ich überlege Aerospike zu verwenden, aber das ist eine Voraussetzung für mich und ich kann den Preis für die Durchführung von Abfragen nicht jedes Mal bezahlen, um zu überprüfen, was bald abläuft, und auch keine Protokolle zu analysieren. das ist nicht gut in der Leistung und es ist eine Amateurlösung. –

+0

@CesarVillasana Nun, jemand muss regelmäßig überprüfen, ob ein Schlüssel abläuft, und es ist super nicht optimal, egal ob auf DB oder auf Client-Seite.Redis implementiert die semi-passive Art der Schlüsselverfallsfunktion. Aus diesem Grund erhalten Sie nur dann ein Ablaufereignis, wenn ein Schlüssel gelöscht wurde, und nicht, wenn er abgelaufen ist. – spektom