2016-03-19 9 views
0

Ich benutze derzeit Aerospike 3.7.3. LSTACK wird weitgehend genutzt und möchte nach LLIST migrieren. Bitte klären Sie meine unten stehenden Fragen.Aerospike: Wie benutze ich LLIST als LSTACK

  1. So migrieren Sie Daten von LSTACK zu LLIST, ohne die Schlüssel zu beeinflussen. ODER auf andere Weise, ohne die Clients zu beeinflussen, die es benutzen.

  2. Wie implementiert man die Funktion von LSTACK mit LLIST. Ich bin derzeit Python Client 2.x

Antwort

3

Aerospike des LLIST API jetzt veraltet und es gibt eine native list Datentyp zur Verfügung.

http://www.aerospike.com/docs/guide/cdt-list.html

Migration von Daten:

LLIST hat eine andere API und Kontrollstrukturen, so dass Sie Ihre Daten für jeden Datensatz migriert werden müssen. Der schnellste wäre ein einfaches Lua-Skript, das auf dem Server läuft und nur alle Stack-Elemente liest und sie mithilfe der folgenden Logik in eine Liste kopiert.

Implementierung Stapel:

Die LLIST API tatsächlich als Lua Funktionen auf dem Server bereits implementiert ist, so dass Sie Ihre eigenen Lua-Code schreiben können, um diese Funktionen zu wickeln und Stapellogik auf der LLIST zu implementieren. Rufen Sie dann diese Lua-Funktionen einfach über den Clienttreiber auf. Dies wird genauso schnell sein und die Schreibsperre für Datensätze beibehalten, so dass die Vorgänge atomar sind.

Die grundlegende Logik besteht darin, den LLIST als Halter für die Stapelelemente zu verwenden und eine andere Ablage im Datensatz zu verwenden, die eine Indexnummer enthält, die die Position (oder Anzahl) der Anzahl der Elemente in der Liste enthält.

  • PUSH - Fügen Sie das Objekt zur Liste hinzu. Erhöhen Sie die Indexnummer.

  • POP - Indexnummer suchen. Verringern Sie diese Zahl. Geben Sie den Wert an der Nachschlagewertposition der Liste ein.


Hier weitere Informationen und Codebeispiele auf einen Stapel bauen, Warteschlange oder eine Karte auf einem LLIST von einem Mitglied Aerospike Engineering-Team:

https://github.com/helipilot50/aerospike-LDT-techniques

+0

Nizza Antwort. Mein Problem ist, dass ich ungefähr 100G Daten in Aerospike gespeichert habe, die von mehreren Kunden rund um die Uhr genutzt werden. Ich muss diese Migration von LSTACK zu LLIST durchführen, ohne die Operation zu beeinträchtigen. Es wäre großartig, wenn Sie eine richtige Methode vorschlagen könnten, um mit meinem Problem umzugehen? – Carbonrock

+1

Es gibt keine einfache Möglichkeit. Die Clients müssen aktualisiert werden, um die benutzerdefinierten Lua-Funktionen zu verwenden, die Sie schreiben, um den Stapel auf LLIST zu verwalten. Sie können ein Bin verwenden, um zu signalisieren, ob ein Datensatz aktualisiert wurde oder nicht, dann kann der Client dies überprüfen und die entsprechende Methode verwenden (entweder alte Stapel-API oder neue Lua-Funktionen).Dies würde bedeuten, zuerst den Client-Code zu aktualisieren und dann ein Migrationsskript auszuführen, das alle Daten durchläuft und diesen speziellen bin-Wert festlegt. Sobald alles fertig ist, können Sie die Client-Logik erneut aktualisieren und diese Bin entfernen. –

+0

Vielen Dank Mani Gandham. Dies dient meinem Zweck – Carbonrock