sehbaer hat geschrieben:ZODB/ZEO als standalone Objektdatenbank
Hallo sehbaer!
Die ZODB ist sicher eine feine Sache. Man kann ziemlich gut mit richtigen "Objekten" arbeiten. Das Arbeiten mit einer Objektdatenbank hat aber auch ziemlich große Nachteile, die du auch in deine Entscheidungsfindung mit einbeziehen solltest.
Vorab: Ich habe mich auch mit der ZODB befasst und wollte damit größere Projekte realisieren. Und dabei sind mir auch einige Punkte klar geworden, die mich wieder davon abgebracht haben.
Es gibt keine Programme von Drittherstellern, die mit einer Ojektdatenbank klar kommen. Das heißt, dass du "alles" selber machen musst. Und damit meine ich wirklich ALLES.
Das fängt schon damit an, dass du die Objektdatenbank nicht einfach per ODBC an ein anderes Programm anbinden kannst. So kannst du die darin gespeicherten Daten NUR über dein eigenes Programm sichtbar machen. Du kannst also nicht einfach mal schnell nachsehen, welche z.B. Personen du in der Datenbank gespeichert hast, die aus München kommen. Das raus zu kriegen, bedeutet Handarbeit!
Dann gibt es kein verwendbares Programm, mit dem du druckbare Berichte mit Daten aus der ZODB erstellen kannst. Wenn du alle Adressdaten ausdrucken möchtest, dann musst du dich selber darum kümmern. Kein Programm unterstützt dich dabei.
Auch das schnelle Auffinden von Daten wird mit zunehmender Größe der ZODB immer schwieriger. Am Anfang kann man ohne Probleme alle Objekte durchlaufen, bis man das gewünschte Objekt gefunden hat. Aber wenn die ZODB größer wird, dann muss man unbedingt mit Indizes (Katalogen) arbeiten. Und die muss man selber erstellen. Die Kataloge werden nicht automatisch verwendet. Man muss beim Suchen nach Daten die Kataloge selbst abfragen. Es kann sein, dass das die letzten Jahre einfacher geworden ist -- mir fehlt die letzte Zeit der Überblick über die Entwicklung der ZODB.
------------------
Relationale Datenbanksysteme haben zwar den Nachteil, dass man damit nicht so einfach Objekte nachbilden kann, mit denen man direkt programmieren kann, dafür erfreuen sie sich allgemeiner Beliebtheit. Es gibt viele Programme von Drittherstellern, die einem sehr viel Arbeit abnehmen können und sie können teilweise ohne Probleme mit Terrabyte großen Datenmengen umgehen, ohne dass sie in die Knie gezwungen werden. Es gibt sie in Klein (z.B. SQLite) und in Groß (z.B. PostgreSQL).
Ich persönlich, arbeite direkt mit den Datenbanken. Ich habe also keine Mapper, die mir die Daten in programmierbare Objekte umwandeln. Aber man kann beides haben. Man kann die Vorteile der relationalen Datenbanksysteme (Geschwindigkeit, SQL, 3rd-Party Programme, Schnittstellen, usw.) mit programmierbaren Objekten verbinden. Das funktioniert mit Schnittstellen wie z.B. SQLAlchemy. Der Overhead ist klein und lässt dich intuitiv mit Datenobjekten arbeiten. Nur würde ich nicht direkt "SQLAlchemy" verwenden, sondern "Elixir", welches auf "SQLAlchemy" aufbaut. Es macht weniger Arbeit, die Datenstruktur damit aufzubauen und der Zugriff auf die Daten kommt mir intuitiver vor. Und trotzdem hast du vollen Zugriff auf die Möglichkeiten von SQLAlchemy -- wenn du sie brauchst.
Mein Fazit: ZODB ist ein schönes Projekt -- aber relationale Datenbanken haben sich durchgesetzt und erfreuen sich großer Unterstützung. Somit lassen sich, meiner Meinung nach, kleine und große Projekte schneller, einfacher und zukunftssicherer mit relationalen Datenbanken erstellen.
Wenn man nicht direkt mit relationalen Datenbanken arbeiten möchte -- wenn man stattdessen lieber mit programmierbaren Objekten arbeiten möchte, dann sollte man zu einem ORM wie z.B. SQLAlchemy greifen. Und wer es noch einfacher haben möchte, der sollte gleich zu Elixir greifen, denn damit wird der Datenzugriff einfacher, ohne dass man auf die Mächtigkeit von SQLAlchemy verzichten muss.
mfg
Gerold
