Was ist die beste Vorgehensweise beim Erstellen von Dokument-IDs in Couchdb?
Wir alle wissen, dass für relationale Datenbanken, ist es am besten Praxis, um mit den numerischen IDs für den Primärschlüssel.
In couchdb die Standard-ID, die generiert wird, ist eine UUID. Ist es am besten zu halten mit den default, oder verwenden Sie eine leicht einprägsame Bezeichner, der verwendet werden in der Anwendung durch den Benutzer?
Zum Beispiel, wenn Sie wurden der Gestaltung der stackoverflow.com Datenbank in couchdb, würden Sie die Frage nacktschnecke (zB. was-ist-beste-Praxis-beim-erstellen-Dokument-ids-in-couchdb) oder eine UUID für jedes Dokument?
InformationsquelleAutor der Frage andyuk | 2009-12-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin kein couchdb-Experte, aber nach ein wenig recherche das ist, was ich gefunden habe.
Ist die einfache Antwort, die UUIDs verwenden, es sei denn, Sie haben einen guten Grund, nicht zu.
Die längere Antwort ist, es hängt davon ab:
Kosten der änderung ID-Vs, Wie wahrscheinlich die ID zu ändern
Niedrigen Kosten zu ändern und wird wahrscheinlich die ID ändern
Ein Beispiel HIERFÜR könnte ein blog mit ein nicht normalisiertes design wie jchris' blog (sofa-Codes auf git-hub).
Jedes mal, wenn eine andere website links zu einem blog-post, ist dies ein Verweis auf die id, also die Kosten für die änderung der id erhöht.
Hohen Kosten der Veränderung-ID und einer ID, die wird sich nie ändern
Ein Beispiel dafür ist jeder DB-design, ist stark normalisiert, verwendet auto-increment-IDs. Stackoverflow.com ist ein gutes Beispiel mit den auto-increment Frage-IDs, die Sie sehen in jeder URL. Die Kosten für die änderung der ID ist extrem hoch, da jeder Fremdschlüssel müssten aktualisiert werden.
Wie viele Referenzen, oder "foreign keys" (in relationaler DB-Sprache) werden an die id?
Keine "foreign keys" wird deutlich erhöhen die Kosten für die änderung der ID. Mit Aktualisierung der anderen Dokumente ist ein langsamer Vorgang und sollte auf jeden Fall vermieden werden.
Wie wahrscheinlich ist es, die ID zu ändern?
Wenn Sie nicht wollen, um UUIDs verwenden Sie wahrscheinlich bereits eine Vorstellung von dem, was ID Sie verwenden möchten.
Wenn es wahrscheinlich ist zu ändern, die Kosten für das ändern der ID sollte niedrig sein. Wenn es nicht ist, wählen Sie eine andere ID.
Was ist Ihre motivation für den Wunsch, die Verwendung einer einprägsamen ID?
Nicht sagen, die Leistung.
Benchmarks zeigen , dass "CouchDB - view-key lookups sind fast, aber nicht ganz so schnell wie direkt-Dokument suchen". Dies bedeutet, dass eine Suche, um einen Datensatz zu finden ist keine große Sache. Wählen Sie nicht freundlich ids, nur weil Sie tun können, ein direkter lookup auf ein Dokument.
Sie viele bulk inserts?
Wenn dem so ist, ist es besser, verwenden Sie inkrementelle UUIDs für eine bessere Leistung.
Sehen diese post über bulk-inserts. Damien Katz Kommentare und sagt:
InformationsquelleAutor der Antwort andyuk
Kommen aus einer relationalen Datenbank-Sicht, es dauerte eine Weile, um herauszufinden, couchdb. Aber die Wahrheit ist das Gegenteil von dem annehmen, beantworten;
Anstelle der Verwendung eines Standard-uuid-Generierung eines smart-id kann sehr helfen, die Sie zum abrufen und Sortieren von Daten.
http://guide.couchdb.org/draft/documents.html
https://pouchdb.com/2014/05/01/secondary-indexes-have-landed-in-pouchdb.html
InformationsquelleAutor der Antwort TimoSolo
Ich weiß, das ist eine lange Frage geantwortet, aber es gibt eine weitere wichtige überlegung für diejenigen, die Entdeckung der Ausgabe. Wenn ein Dokument gelöscht wird, werden alle Sie wissen es ist die id. Die Eingabe, ob es sich um explizite (
type:foo
) oder implizit (duck typing) funktioniert nicht. So können Sie nicht abonnieren, um änderungen fürdoc.deleted===true && doc.type==foo
werden, denn nach dem löschendoc.type===undefined
. Ein_id
Wert, der Sie Dekodieren kann post-hoc-nützlich ist, insbesondere, wenn Ihr client-code muss sonst Staatenlosen (und kann daher keine cache eine Liste von_id
s-Typ).InformationsquelleAutor der Antwort Jim
Die _id wird verwendet, viel in der CouchDB-Einbauten und zusätzliche hashing Kosten gehen zu verlangsamen eine Reihe von Einbauten, so ist es am besten stick mit der UUID zur Verfügung gestellt.
InformationsquelleAutor der Antwort mikeal
Könnten Sie gehen mit der Standard-CouchDB-id(UUID), wie hieß es in der Dokumentation die wichtigsten Gründe für die Verwendung von Standard-UUID, sind wie folgt:
Nun, Auf der anderen Seite, Wenn du dich auf dem server(CouchDB) zur Erzeugung der UUID und Sie am Ende macht zwei POST-requests, weil der erste POST-Requests bombardiert, Sie generieren zwei docs und nie herausfinden, über die erste, weil nur der zweite wird zurück gemeldet, es ist also eine gute Idee zu generieren, Ihre eigenen UUIDs, um sicherzustellen, dass Sie nie am Ende mit doppelten Dokumente, aber ich werde bestimmt gehen mit der UUID, es sei denn, Sie speziell brauchen sonst. documenta.
InformationsquelleAutor der Antwort Mike
Den primary key in einer DB sollte nie "Sinn", außer vielleicht zu kodierenden Sequenz. Möchten Sie vielleicht ändern Sie den SLUG, aber nicht der Primärschlüssel.
Könnte es ein gutes argument, etwas zu verwenden, beginnend mit einem Zeitstempel zu haben, inhärente Bestellung in Ihre Schlüssel. Ich habe oft verwenden Sie "%f@%s" % (time(), hostname ()), um die geordnete, eindeutige Schlüssel. (Dies funktioniert nur, wenn Sie Ihre Zeit () - Implementierung nie wieder den gleichen Wert zweimal.)
Für andere Sachen (z.B. Bilder) , wo ich will, um Duplikate zu vermeiden verwende ich oft sha(Daten) als Schlüssel.
InformationsquelleAutor der Antwort max