2013-09-26 4 views
11

Ich verwende mongoDB zum ersten Mal in einem RESTful-Service. Zuvor war die ID-Spalte in meinen SQL-Datenbanken eine inkrementierende Ganzzahl, sodass meine RESTful-Endpunkte ungefähr wie /rest/objectType/1 aussehen würden. Gibt es irgendeinen Grund, warum ich nicht die Objekt-IDs von mongoDB in der gleichen Rolle verwenden sollte, oder ist es sinnvoller, eine separate Inkrementierungs-Integer-ID-Spalte zu pflegen und diese für URLs zu verwenden?Gibt es irgendwelche Gründe, warum ich ObjectId in meiner RESTful-URL nicht verwenden sollte

Antwort

14

Nachdem ObjectId s in RESTful-APIs mehrmals verwendet wurde, ist der größte Nachteil, dass sie in Bezug auf eine saubere URL sehr laut sind. Sie werden entweder als HEX-Zahl verlassen, oder es auf eine sehr große ganze Zahl konvertieren, sowohl was für eine etwas unfreundlich URL:

/rest/resource/52435dbecb970072ec3a780f 
/rest/resource/25459211534898951476729247759 

ich einen „Titel“ der URL hinzugefügt haben (wie Stackoverflow sie etwas freundlicher ist) zu machen:

/rest/resource/52435dbecb970072ec3a780f/FriendlyResourceName 

natürlich ist der „Titel“ in der Software ignoriert, aber der Benutzer sieht es und kann mental die verrückte ID Segment ignorieren.

Es gibt sehr wenig nützlich, die von der Infrastruktur durch Aussetzen sie gelernt werden könnte:

  1. Zeitmarke
  2. Machine ID
  3. Prozess-ID
  4. Zufall Inkrementieren Wert

Andere als möglicherweise Sammeln von Computer-IDs (die normalerweise die Anzahl der Clients angeben, dieerstellens), da ist nicht viel.

s sind nicht zufällig, Sie können sie also nicht zur Sicherheit verwenden. Sie müssen immer die Daten sichern. Während sie sich nicht auf eine naheliegende Weise erhöhen, wäre es leicht, andere Ressourcen durch rohe Gewalt zu finden. Wenn Sie jedoch zuvor automatisch inkrementierende IDs verwendet haben, ist dies kein neues Problem für Sie.

Wenn Sie wissen, dass Sie zu einem bestimmten Zeitpunkt nicht viele neue Dokumente erstellen, kann es sinnvoll sein, eines der Muster here zu verwenden, um eine einfachere ID zu erstellen. In einer App, die ich geschrieben habe, verwendete ich für einige der Dokument-IDs, die in URLs angezeigt wurden, eine Auto-Inc-Technik, und für diejenigen, die nur Ajax waren, verwendete ich ObjectId s. Ich wollte wirklich, dass einige URLs leicht "getippt" werden. Kein Formular ist leicht von einem Endbenutzer getippt. Das ist eine der Stärken von MongoDB - dass Sie jedes gewünschte Format verwenden können. :)

6

Es ist klüger, die s zu verwenden, da das Aufrechterhalten eines inkrementierenden Zählers einen Engpass darstellen kann. Da ObjectId außerdem einen Zeitstempel enthält und monoton ist, können sie bei der Optimierung von Abfragen hilfreich sein.

Die ObjectIds kann erraten werden, aber da dies definitiv für die Erhöhung von IDs gilt, vermute ich, dass Sie sich nicht auf Sicherheit durch Unklarheit vorher verlassen haben, also ist das kein Problem für Sie.

Ein Nachteil, wenn auch ein kleiner, ist, dass die Erstellungszeit auf Ihrem Server an den Benutzer leckt, d.h. wenn der Benutzer dies als ObjectId identifizieren kann, kann sie die Erstellungszeit des Objekts zurückentwickeln. Das ist das einzige potenzielle Problem, das ich sehe.

+1

Große Antwort, und danke für einige Pros/Nachteile gehen. – welbornio

Verwandte Themen