2016-04-20 9 views
0

Anforderung:
Wir müssen den Händlern eine zufällige, lang genug Nummer/Zeichenfolge zuweisen, so dass sie eindeutig identifizierbar sind (wollen Sie nicht, dass jemand die Kennung erraten). Dies ist erforderlich, da wir diese Nummer/Zeichenfolge als QR-Code drucken und an Händler weitergeben, damit unsere Benutzer den QR-Code lesen und die Informationen über den Händler erhalten können.Implementieren von UUID für bessere Leistung

aktuelle Implementierung: eine eindeutige ID zu speichern, erzeugt durch TimeBasedGenerator von JUG UUID-Generator
wir können nicht ids drucken, wie sie sequentiell sein wird, so haben wir ein neues Feld (externalId) eingeführt. Als ich mehr recherchierte, stellte ich fest, dass es Leistungsprobleme mit UUID gibt. Alle Artikel sprechen über UUId als Primärschlüssel, ich benutze UUID nicht als Primärschlüssel, sondern als sekundären Bezeichner. Ich bin nicht besorgt über Einfügungen und Updates, da sie im Vergleich zur Suche weniger sein werden. Da der Benutzer uns die UUID sendet, die er aus dem gedruckten QR-Code liest, müssen wir den Händler anhand dieses UUID-Feldes suchen. Daher wird sich die Leistung stark auswirken.

Lösung nach mir:
statt UUID werden wir eine Kombination von ID geben: UUID, so dass, wenn wir die Anfrage bekommen können wir die Händler mit ID und prüfen, ob die externalId (UUID) vorhanden aufgeteilt und holen in unsere DB passt zu der bereitgestellten, wenn sie übereinstimmt, geben wir den Händler nicht weise zurück.

Wird diese Lösung die Leistung erheblich erhöhen oder wird die Zeit, die durch die Zeichenfolgenoperationen benötigt wird, den Effekt zunichte machen.

Gibt es einen besseren Ansatz, dies zu tun?

Dank

+0

Haben Sie etwas über RSA gesucht/gelesen? Es gibt ein Sicherheitspaket in Java, das RSA-Schlüssel erstellen kann. Es wird zufällig generiert und kann codiert und decodiert werden. Hier ist eine Dokumentation: https://docs.oracle.com/javase/tutorial/security/apisign/gensig.html –

Antwort

0

Die beste Umsetzung würde davon abhängen, Charakter Verteilung Ihrer UUID aber, was ich tat, wenn nur die UUID verwenden, mit ähnlicher Situation für den Endverbraucher konfrontiert ist. In der Datenbank habe ich eine Spalte mit den ersten 2 Zeichen der UUID hinzugefügt und diese Spalte indiziert.

Entweder dies oder, wie Sie vorgeschlagen haben, würde die ID den gleichen Zweck erfüllen. Die Vorteile der Indizierung eines Teil UDID sind, dass

  1. Sie optimieren können, wie viele Zeichen zur Verbesserung der Leistung zu verwenden ist
  2. die ID nicht verwendet externaly möglicherweise verursacht Probleme.

Auf der anderen Seite wird mit einem ganzzahligen Index wahrscheinlich weniger Speicher und braucht keine

Performance weise, für meine Implementierung tweeking wir Suchanfragen von 1 zugewandt wurden in einer Million unter 7-8 Sekunden . Mit dieser Lösung sind wir auf ein paar Millisekunden gefallen

1

UUIDs werden in verschiedenen Geschmacksrichtungen generiert. Wie Sie vielleicht bereits wissen, umreißt RFC 4122 eine Variante (d. H. UUID-Schema), die fünf verschiedene Versionen definiert. Ich schlage vor, dass Sie in Version aussehen 1 von RFC 4122.

Version 1 verwendet eine MAC-Adresse des Geräts die UUID wie die letzten 12 Ziffern der generierten UUID zu erzeugen.

Angenommen, Sie gehen zu einem gebrauchten Computer-Recycler und kaufen einen veralteten Ethernet-Adapter; Mach es hoch und erhalte die MAC-Adresse dieses Adapters; und dann zerstören Sie den Adapter (Schredder, Schrotflinte, Säure, etc.).Sie können jetzt sicher sein, dass kein anderer Computer im Universum eine V1-UUID mit dieser MAC-Adresse generiert.

Jetzt könnten Sie einen UUID-Generator (RFC 4122, V1) schreiben, der die geerntete MAC-Adresse verwendet.

Sie könnten eine separate MAC-Adresse (von zusätzlichen Karten) für jeden Händler ernten und dann wären Sie in der Lage, UUIDs zu identifizieren, die für jeden Händler generiert wurden.

BONUS:Sie mit V1 UUIDs experimentieren könnten Mahonri Moriancumer's UUID and GUID Generator and Forensics verwenden.

+0

[Geben Sie 1 UUIDs im MySQL-Kontext ein] (http://mysql.rjweb.org/doc.php/uuid), einschließlich Code zum Umordnen der Bits. –

Verwandte Themen