2016-08-08 24 views
0

Wenn Sie mit dynamoDB arbeiten und spezielle IDs für Kunden, Produkte oder andere Dinge generieren müssen, werden die Benutzer mit der richtigen Vorgehensweise in Kontakt kommen.Generieren von lesbaren IDs für dynamoDB

Sure UUIDs sind großartig, aber es ist nicht etwas, was Sie von einem Kunden erwarten können und wenn ich mein eigenes auf meinem Server machen möchte, muss ich ziemlich peinliche Datenbankaufrufe machen, um sicherzustellen, dass ich entweder das nächste in irgendeiner Reihenfolge benutze , spare ein seltsames Extra-Feld oder mache im Dunkeln stichprobenartig.

Wie kann ich dieses Problem lösen?

Antwort

0

Ich würde behaupten, dass UUIDs noch der Weg zu gehen. Vor allem, wenn Sie eine skalierbare Lösung entwerfen möchten, dann können Sie sich nicht auf einen einzelnen "Point of Failure" verlassen, um eine Art sequenzielle eindeutige Identifikatoren zu generieren - irgendetwas wie das erfordert Synchronisation und Verfügbarkeit, die der Feind der Leistung in einem sind verteiltes System.

Wenn Sie jedoch noch einige menschliche freundliche Kennungen erzeugen möchten, haben Sie ein paar Optionen:

  1. Sie mit UUIDs und falten die in die Hälfte (nehmen Sie die ersten 8 Bytes beginnen könnte und Xor mit den letzten 8 Bytes), dann nehmen Sie die resultierende 64-Bit-Zahl und kodieren Sie mit einer Basis 62 Codierung (Zahlen von 0-9 plus Groß- und Kleinbuchstaben), um eine 11-zeichenige Zeichenfolge zu generieren, die etwas menschenfreundlicher ist dann eine typische UUID; Wenn Sie mit weniger Entropie in Ordnung sind, können Sie die UUID zweimal falten, indem Sie eine 32-Bit-Zahl erhalten, die Sie in eine 6-stellige Basis-62-Darstellung kodieren können, oder eine 7-stellige Basis-32-Kodierung, die nur Zahlen und Großbuchstaben verwendet

  2. Der zweite Ansatz, den Sie verwenden könnten, besteht darin, eine Kombination aus MAC-Adresse, Zeitstempel und Pseudozufallszahlengenerator zu verwenden, um Ihre eigenen IDs nach einer bestimmten Regel zu generieren, ähnlich wie UUIDs generiert werden, aber mit weniger Entropie dass Sie die IDs so codieren, dass sie Benutzer sind freundlich

Sie Probleme verhindern kann, die in dem Fall in Kraft treten könnte, wo die gleiche ID zufällig in zwei verschiedenen erzeugt wird Orte, können Sie conditional writes to DynamoDB nutzen.

+0

Vielen Dank für Ihre Eingabe, ich bin sicher, wir können eine Lösung finden, die so etwas tut, aber ich bin überrascht, wie komplex es ist, dieses Problem zu lösen. – Jeppz

+0

@Jeppz - ja, verteiltes Computing ist nicht trivial;) Übrigens habe ich der Antwort eine Bearbeitung hinzugefügt, um zu verdeutlichen, dass Sie sich vor möglichen doppelten IDs schützen können, indem Sie bedingte Schreibvorgänge in DynamoDB verwenden –

0

Sie können einen Zähler im Prozesscache (oder im Cache-ähnlichen Memcache oder redis) verwenden und Sperren für diesen Zähler verwenden, um den nächsten Wert zu erhalten.

psaudo Code:

function get_next_value(): 
    lock: 
     counter+=1 
     return counter