Login
Newsletter
Werbung

Do, 8. Juli 2010, 15:58

CouchDB – Datenbank mal anders

Revisionieren und Kompaktieren

Übersicht über alle angelegten Design Documents

Jochen Schnelle

Übersicht über alle angelegten Design Documents

Im Gegensatz zu den meisten anderen Datenbanken revisioniert sich CouchDB automatisch, dies ist ein Grundbestandteil ihrer Funktionalität. Sobald eine Änderung in einem Dokument gespeichert wird, wird die neue Revision erstellt.

Den aktuellen Stand kann man im Feld _rev ablesen, die Ziffern links vom Minus-Zeichen geben die Revisionsnummer an. Eine neue Revision wird für jede Änderung angelegt, sei es, dass ein Feld geändert oder ein neues hinzugefügt oder dass ein neuer Anhang hochgeladen wurde. Möchte man mehrere Änderungen an einem Dokument vornehmen, so kann man diese hintereinander durchführen und dann erst zusammen speichern, um die Revisionsnummer nicht unnötig in die Höhe zu treiben.

Die alten Revisionen bleiben grundsätzlich erhalten und können auch durch Angabe der Revisionsnummer abgerufen werden. Der Aufruf von http://localhost:5984/DATENBANK/DOKUMENT?rev=2-0cedead41c417b405d0153a3307db082 gibt die zweite Revision des Dokuments zurück. Leider muss immer die volle Revisionsnummer mit angegeben werden, welche natürlich von Dokument zu Dokument variiert. Alle bisherigen Revisionsnummern zu einem Dokument kann man über http://localhost:5984/DATENBANK/DOKUMENT?revs=true abfragen.

Bedingt durch die automatische Revisionierung kann die Datenbank schnell relativ groß werden – besonders dann, wenn man öfters größere Anhänge aktualisiert. Auf die Leistung und Geschwindigkeit hat dies zwar kaum einen Einfluss, aber natürlich auf die verfügbare Speicherkapazität auf dem Server. CouchDB bietet deshalb die Möglichkeit, eine Datenbank zu kompaktieren.

Dabei werden die Felder aller alten Revisionen gelöscht, nur die neuste bleibt erhalten. Die Zählung der Revisionen ist davon nicht betroffen, diese wird weiter fortgeführt. Versucht man, eine alte, nicht mehr vorhandene Revision aufzurufen, erhält man als Ergebnis der Abfrage den JSON-String deleted zurück. Die Kompaktierung der Datenbank kann durch einen Aufruf des entsprechenden Befehls über das HTTP-API ausgelöst werden. Wer also zwingend auf alle alten Revisionen angewiesen ist, sollte den Aufruf entweder unterbinden oder weitere Maßnahmen zum Speichern alter Revisionen ergreifen.

Replikation

Datenbankreplikation über Futon

Jochen Schnelle

Datenbankreplikation über Futon

CouchDB beherrscht auch Replikationen von Datenbanken von Hause aus. Die Replikation kann in jede beliebigen CouchDB-Datenbank erfolgen, egal ob diese lokal oder auf einer entfernten, über das Internet erreichbaren Maschine läuft. Weiterhin ist die Replikation in beide Richtung möglich. So kann man z.B. eine Datenbank von Maschine A auf Maschine B replizieren, dort Änderungen machen und dann wieder B auf A zurück replizieren. Dabei können natürlich Konflikte entstehen, wenn z.B. gleichzeitig auf Maschine A Daten im gleichen Dokument geändert wurden. CouchDB erkennt solche Konflikte vor dem Durchführen der Replikation automatisch und unterbindet diese dann solange, bis der Konflikt händisch aufgelöst wurde. Weiterhin wird bei der Replikation einer bestehenden Datenbank nur die neuste Revision kopiert, alte Revisionen nicht.

Die Replikation kann entweder manuell durch einen entsprechenden Befehl oder automatisch ausgeführt werden. Nutzt man Futon, klickt man einfach im Menü rechts auf Replication, wählt den Zielserver und die Zieldatenbank aus und führt die Replikation durch. Der gleiche Schritt ist auch über das HTTP-API mit dem entsprechenden Befehl möglich. Finden häufig Änderungen in der Datenbank statt, ist die manuelle Replikation jedoch unpraktisch. In der Konfiguration von CouchDB kann aber auch die automatische Replikation eingestellt werden. Dieses läuft inkrementell und immer dann, wenn in der Ausgangsdatenbank eine Änderung gemacht wurde.

Weitere Informationen zur Replikation sowie Hinweise und Tipps zum Lösen von Konflikten findet man auf der entsprechenden Seite im CouchDB-Wiki.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung