MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Kürzen Sie die MongoDB-ID in Javascript

Das Parsen der ObjectId aus einer Anfrage wäre nicht schwierig (also bin ich mir nicht sicher, warum das ein Problem ist?). Wenn das Ziel darin besteht, typisierbare URLs zu erstellen, wäre eine kürzere und "freundlichere" URL wertvoll.

Sie können eine 12-Byte-Zahl, die in einem Sharding-MongoDB-Setup garantiert eindeutig ist, nicht auf weniger als 12 Byte verdichten und garantiert eindeutig machen (Sie haben zum Beispiel unter sieben Zeichen erwähnt).

Aus den Dokumenten , besteht die MongoDB ObjectId aus:

  • ein 4-Byte-Zeitstempel
  • eine 3-Byte-Maschinenkennung
  • eine 2-Byte-Prozess-ID
  • und einen 3-Byte-Zähler.

Sie müssen also entweder einen Teil der ObjectId opfern (und damit Sharding) oder ein alternatives ID-Erstellungsformat entwickeln, das indiziert ist.

Während Sie die ID potenziell hashen könnten, können wiederum Konflikte auftreten, für die Sie codieren möchten (auch hier können Sie 12 Bytes nicht auf 4 Bytes reduzieren und Eindeutigkeit garantieren). Und wenn Konflikte möglich sind (und dies der Fall sein wird, wenn Sie die Gesamtzahl der verfügbaren Bits reduzieren), benötigen Sie sowieso eine Art Sekundärtabelle (und Sie müssten einen Index erstellen, um von der generierten ID zur ObjectId zu wechseln). .

Resultierende Optionen:

  • Entfernen Sie normalerweise signifikante Bits -- wenn Sie dies tun, tun Sie es nicht Shard die Sammlung
  • Entwickeln Sie Ihre eigene eindeutige ID-Lösung (und wenn es sich um eine Webfarm handelt, sieht sie am Ende möglicherweise sehr ähnlich aus wie die von MongoDB, um die Eindeutigkeit zu handhaben)
  • verwenden Sie die ObjectId als lange Zahl und führen Sie einen verkürzten Algorithmus darauf aus (sie muss zuerst in kleinere Teile zerlegt werden, da sie die numerische Genauigkeit von JavaScript von 53 Bit überschreitet), versuchen Sie diesen Algorithmus zum Beispiel =kodieren es (wird etwa 17 Zeichen lang sein)
  • verwenden Sie eine andere kürzere, aber eindeutige ID für Ihre Dokumente
  • Am einfachsten:Akzeptieren Sie einfach, dass die IDs lang sind. :)

(Es ist nicht klar, warum der Browser diese Konvertierung durchführen muss – warum sollte er die ObjectID des Dokuments haben?)