Frage

Rails das Konzept der Migration verwendet, um mit Modell umgehen ändert die Active API.

CouchDB verwendet JSON (verschachtelte Karten und Arrays) seine Modellobjekte darzustellen.

Bei der Arbeit mit CouchDB so weit, ich sehe nicht, gute Möglichkeiten zu erkennen, wenn die Struktur des Dokuments geändert hat (anders als als Entwickler diszipliniert) oder für Dokumente von einem alten zu einem neuen Modell zu migrieren.

Gibt es vorhandene Funktionen oder haben Sie Best Practices für den Umgang mit Modelländerungen in CouchDB haben?

War es hilfreich?

Lösung

Zeit für RDBMS de-Gehirnwäsche. :)

Eine der größten Punkte von couchdb Schema losem Design soll verhindern, dass die Notwendigkeit für Wanderungen direkt richtet. Die JSON-Repräsentation von Objekten macht es leicht, einfach Ente Ihre Objekte geben.

Zum Beispiel, da Sie einen Blog-Typ Web-App mit den Beiträgen haben und was Phantasie Dinge, die Menschen lagern in einem Blog. Ihre Post Dokumente Felder wie Autor, Titel, erstellt bei etc. Nun kommen Sie zusammen und denken sich: „Ich verfolgen sollte, welche Phase der Mond ist, wenn ich meine Beiträge zu veröffentlichen ...“ Sie können gerade hinzufügen, starten moon_phase als ein Attribut, um neue Beiträge.

Wenn Sie vollständig sein wollen würden Sie gehen zurück und fügen moon_phase zu alten Posts, aber das ist nicht unbedingt notwendig.

Ihre Ansichten können Sie moon_phase als Attribut zuzugreifen. Und es wird eine Ausnahme oder etwas null oder Ursache sein. (Keine JS-Experte, ich denke, null ist die richtige Antwort)

Das Ding ist, ist es nicht wirklich wichtig. Wenn Sie Lust auf etwas zu ändern gerade ändern. Obwohl sicherstellen, dass Ihre Ansichten, dass der Wandel verstehen. Welche meiner Erfahrung nach nicht wirklich viel benötigen.

Auch wenn Sie wirklich paranoid sind, könnten speichern Sie eine Version / type-Attribut, wie in:

{
   _id: "foo-post",
   _rev: "23490AD",
   type: "post",
   typevers: 0,
   moon_phase: "full"
}

Ich hoffe, das hilft.

Andere Tipps

Wenn Sie in Schemata mit und wollen noch CouchDB verwenden Sie eine „Impedance Mismatch“ erhalten.

Dennoch „Migration“, die ist nicht so schwer. In jedem Dokument ein schema_version Element. Dann haben Sie Ihre „Dokumentenlesefunktion“ Aktualisierung enthalten. So etwas wie folgt aus:

def read(doc_id):
    doc = db.get(doc_id)
    if doc.schema_version == 1:
        # version 1 had names broken down too much
        doc.name = "%s %s" % (doc.first, doc.last)
        del doc.first
        del doc.last
        doc.schema_version = 2
        db.put(doc)
    if doc.schema_version == 2: weight
        # version 2 used kg instead of g
        doc.weight_g = doc.weight_kg * 1000
        del doc.volume_kg
        doc.schema_version = 3
        db.put(doc)
    return doc

Wenn Sie die gesamte DB auf einmal nur nennen read(doc_id) für jedes Dokument aktualisieren möchten.

Schauen Sie sich ActiveCouch .

CouchDB ist schema weniger absichtlich, so gibt es keine 1-zu-1-Abbildung von Konzepten aus der Active Migrationen auf eine CouchDB äquivalent. Allerdings ist ActiveCouch Migrationen für CouchDB ‚Ansichten‘ enthalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top