2009-07-13 3 views
0

Ich bin auf der Suche nach einer Datenbankbibliothek, die in einem Editor verwendet werden kann, um ein benutzerdefiniertes Dokumentformat zu ersetzen. In meinem Fall würde das Dokument ein funktionales Programm enthalten.Gibt es eine Datenbankimplementierung mit Benachrichtigungen und Revisionen?

Ich möchte, dass Anwendungsdaten auch während der Bearbeitung persistent sind, so dass bei einem Programmabsturz keine Daten verloren gehen. Ich weiß, dass alle Datenbanken das bieten.

Darüber hinaus möchte ich auf das Dokument zugreifen und bearbeiten von mehreren Threads, Prozesse, möglicherweise sogar mehrere Computer.

Format: eine einfache Schlüssel/Wert-Datenbank würde völlig ausreichen. SQL muss normalerweise verpackt werden, und wenn ich vermeiden kann, eine schwere ORM-Abhängigkeit zu ziehen, wäre das großartig.

Revisionen: Ich möchte in der Lage sein, Änderungen bis zur ersten Änderung an dem Dokument, das jemals gemacht wurde, nicht nur in einer Sitzung, sondern auch zwischen Sitzungen/Programmläufen rückgängig zu machen.

Ich brauche Benachrichtigungen: jeder Prozess muss in der Lage sein, über Änderungen am Dokument benachrichtigt zu werden, damit es seine Ansicht entsprechend aktualisieren kann.

Ich sehe diese Anforderungen als ziemlich einfach, eine Grundlage, um die üblichen schwierigen Probleme einer Bearbeitungsanwendung zu lösen: Undo/Redo, mehrere Ansichten auf den gleichen Daten. Daher sollte das Datenbanksystem leicht und anspruchslos sein.

Vielen Dank für Ihre Einsichten im Voraus :)

+0

Ich weiß, das ist ziemlich alt, aber ich arbeite an einer Datenbank, die genau Ihre Anforderungen erfüllen würde. Es heißt aodbm (siehe http://sf.net/projects/aodbm/). Es ist im Moment ziemlich einfach und es ist wahrscheinlich, dass das Dateiformat vor der ersten Veröffentlichung geändert wird, aber es ist in einem brauchbaren Zustand und wird gerade entwickelt. –

Antwort

1

Berkeley DB ist eine anspruchslose, leichtgewichtige Schlüssel-Wert-Datenbank, die Sperren und Transaktionen unterstützt. Es gibt Bindungen in vielen Programmiersprachen, darunter C++ und Python. Sie müssen Revisionen und Benachrichtigungen selbst implementieren, aber das ist gar nicht so schwer.

+0

Ich kenne Berkeley DB seit langer Zeit, und ich denke, das ist die beste Antwort bisher, obwohl ich es nicht mag;) Ich begann einen Prototyp, der bis jetzt ziemlich gut geht. Wie Sie vorgeschlagen haben, waren die zusätzlichen Funktionen einfach zu implementieren. – paniq

0

Check out ZODB. Es sind keine Benachrichtigungen integriert, daher benötigen Sie dort ein Nachrichtensystem (da Sie möglicherweise separate Computer verwenden). Aber es hat Transaktionen, die Sie für immer zurücksetzen können (es sei denn, Sie packen die Datenbank, die frühere Versionen entfernt), können Sie direkt als integrierten Teil der Anwendung zugreifen, oder es kann als Client/Server (mit mehreren Clients natürlich ausgeführt werden), Sie können automatische Persistenz haben, es gibt kein ORM, etc.

Es ist so ziemlich Python-only (es basiert auf Pickles).

http://en.wikipedia.org/wiki/Zope_Object_Database

http://pypi.python.org/pypi/ZODB3

http://wiki.zope.org/ZODB/guide/index.html

http://wiki.zope.org/ZODB/Documentation

1

Es könnte als ein bisschen mehr Leistung sein, was Sie fordern, aber Sie sollten auf jeden Fall auf CouchDB aussehen.

Es handelt sich um eine Dokumentendatenbank, bei der "Dokument" als JSON-Datensatz definiert ist. Es speichert alle Änderungen an den Dokumenten als Revisionen, so dass Sie sofort Überarbeitungen erhalten. Es verfügt über leistungsstarke JavaScript-basierte View-Engine, um alle Daten, die Sie benötigen, aus der Datenbank zu aggregieren.

Alle Commits an die Datenbank werden an das Ende der Repository-Datei geschrieben und die Schreibvorgänge sind atomar, was bedeutet, dass nicht erfolgreiche Schreibvorgänge die Datenbank nicht beschädigen.

Ein weiterer netter Bonus, den Sie bekommen, ist die einfache und flexible Replikation und Ihrer Datenbank.

Siehe Detaills auf their homepage

Auf der Minus-Seite (auf der Sicht abhängig) ist die Tatsache, dass es in Erlang und (soweit ich weiß) läuft als externen Prozess geschrieben wird. ..

Ich weiß nichts über Benachrichtigungen obwohl - es scheint, dass wenn Sie mit replizierten Datenbanken arbeiten, die Änderungen sofort zwischen Datenbanken repliziert/synchronisiert werden. Ansonsten sollten Sie in der Lage sein, Ihr eigenes Benachrichtigungsschema zu erstellen ...

+0

Ich bin mir nicht sicher, ob CouchDB Revisionen speichert. Dies scheint nur kurzfristig zu sein, um eine konsistente Ansicht und blockierungsfreie Abfragen zu ermöglichen. Die Revisionen werden von Zeit zu Zeit gelöscht, denke ich. – Thilo

+0

Ich hatte von keiner Stelle in der Dokumentation einen solchen Eindruck ... Um ganz ehrlich zu sein - ich hatte noch keine echte Erfahrung mit CouchDB und konnte daher solche Behauptungen nicht untermauern ... –

Verwandte Themen