Objektdatenbank

Einleitung


Abbildung 1: RDB vs. ODB

Da sich heutzutage die meisten Programmiersprachen, (wie z.B. Java, .NET und C#) mit Objekten beschäftigten und objektorientierte Modelle und Denkweisen zum Einsatz gebracht wurden, ist es wünschenswert, den kompletten Abwicklungsprozess(also von der Implementierung bis hin zur kompletten Verwaltung und Speicherung) einheitlich und einfacher zu gestalten.

Zuerst sollte die Problematik verstanden werden, die zu der Entwicklung von verschiedenen nicht relationalen bzw. NoSQL-Datenbanken geführt hat und warum diese Datenbanken entwickelt wurden. Hier werden die Objektdatenbanken(ODB) beschrieben und die ODB sind eine Teil der NOSQL-Bewegung. Man arbeitet mit Objekten und möchte die Vorteile der objektorientierten Programmierung (OOP) ausnutzen. Einige davon sind:

  • Natürliche Modellierung und Repräsentation von Problemen: Sowohl größere als auch mittlere Probleme lassen sich auf eine Art und Weise modellieren, zersplittern und lösen, die der menschlichen Denkweise sehr nahe kommt.
  • Bessere Übersichtlichkeit, Lesbarkeit und Verständlichkeit: die Daten und die auf diesen Daten operierende Funktionen werden zu einer Einheit zusammengefasst. Das erhöht die Übersichtlichkeit, Lesbarkeit und Verständlichkeit von Programmen und reduziert die Fehlerquote.
  • Wiederverwendbarkeit: Teile von Programmen lassen sich einfach und flexibel in anderen Programmen wiederverwenden.
  • Erweiterbarkeit: Programme lassen sich einfach erweitern und an geänderte Anforderungen anpassen.[OBJ_2004, s.2]

Ein Objekt kann man sich am besten als einen bestimmten Gegenstand vorstellen, als Beispiel betrachten wir den Gegenstand "Auto". Dieser Gegenstand verfügt über bestimmte Bestandteile, z.B. einen Motor, ein Gaspedal, einen Benzintank. s. Abbildung 2: Komplexe Hierarchie von Objekten. Diese Teile des Autos nennt man Attribute. Ein Attribut kann auch eine einfache Eigenschaft des Autos sein, z.B. die Farbe "rot". Neben den Attributen besitzen Objekte Methoden. Bezogen auf das Beispiel eines Autos wären solche Methoden z.B. gasGeben(), lenken() usw. Vereinfacht kann man sich Attribute als "Eigenschaften" und Methoden als "Aktionen" vorstellen.[PLO_2005, s.130].

Objekt-relationale Unverträglichkeit


Abbildung 2: Klassenhierarchie

Wenn keine Objektdatenbank im Einsatz ist, müssen die Daten, um gespeichert zu werden, in eine andere Form umgewandelt werden. In einer Objektdatenbank werden die Objekte als Objekte gespeichert. In einer relationalen Datenbank werden die Objekte als Relationen abgespeichert. (s. Abbildung 1: Relationale Datenbank (RDB) vs. Objektdatenbank (ODB)). Dadurch entsteht eine Unverträglichkeit der Daten, die auch als object-relational impedance mismatch bezeichnet wird.[BRI_2008] Dieser Begriff ist in der Literatur nicht eindeutig definiert, im Folgenden werden jedoch die allgemein akzeptierten Bestandteile kurz vorgestellt. Vereinfacht ausgedrückt umfasst das impedance mismatch alles Aspekte, die den Einsatz von objektorientierter Programmierung und relationaler Datenhaltung problematisch machen.


Abbildung 3: vertikales Mapping

Ein wichtiges Instrument der OOP zur Umsetzung komplexer Modelle ist die Vererbung. Im relationalen Paradigma gibt es keinen vergleichbaren Ansatz. Zur Umwandlung entsprechender Klassenhierachien in ein relationales Modell (objekt-relationales Mapping, ORM) wurden zwei Ansätze entwickelt, die jedoch bei mit Nachteilen verbunden sind. Am Beispiel der in Abbildung 2 dargestellten Klassen lässt sich das jeweilige Vorgehen zeigen. In beiden Fällen wird für jede Klasse eine Tabelle angelegt. Beim vertikalen Vorgehen (Abbildung 3) enthält jede Tabelle nur die Attribute der entsprechenden Klasse sowie einen Fremdschlüssel für die Tabelel der Oberklasse. Für jedes Objekt wird ein Eintrag in der zur Klassen gehörenden Tabelle sowie in den Tabellen aller Oberklassen angelegt. Beim Zugriff müssen die Datensätze mit Joins verbunden werden, was bei komplexen Modellen zu Performanceeinbußen führt. Dabei ist zu bedenken, dass die Umsetzung komplexer Modelle eine Stärke der OOP ist. Beim horizontalen Vorgehen wird enthält jede Tabelle die Attribute der zugehörigen Klasse sowie aller Oberklassen. Bei einer Änderung einer Oberklasse müssen dadurch jedoch die Tabellen aller ableitenden Klassen ebenfalls aktualisiert werden.


Abbildung 4: horizontales Mapping

Wie Datensätze im relationalen Bereich müssen sich auch Objekte eindeutig identifizieren lassen. Jedoch ist die Objektidentät (OID) unabhängig von den Attributwerten. Der Primärschlüssel eines Datensatzes hingegen besteht aus einigen oder allen Attributen der Tabelle. Entsprechend müssen die Datensätze beim Mapping um einen künstlichen Primärschlüssel angereichert werden.Neben den auch im relationalen Ansatz vorhandenen Attributwerten zeichnet sich ein Objekt in der OOP zusätzlich durch sein Verhalten in Form von Operationen aus. Hierzu gibt es kein Gegenstück in relationalen Systemen. Die Operationen dienen zudem zur Umsetzung der Datenkapselung, also zum Verhindern des direkten Zugriffs auf die Attributwerte eines Objektes. In relationalen Datenbanken lassen sich die Werte eines Datensatzes hingegen direkt ändern.

Grundsätzlich ist es bei der Kombination von OOP und relationaler Datenhaltung immer erforderlich zwei Datenmodelle zu erstellen. Dies ist wie oben dargestellt in vielen Fällen problematisch. Auch ist dieses Vorgehen in der Regel fehleranfälliger im Vergleich zu einem einzelnen Modell. Hinzukommt die aufwendigere Wartung.

Das Problem liegt bei den unterschiedlichen Paradigmen vor. Einerseits gibt es ein Objekt, anderseits eine Relation. Eine Relation beschreibt die Beziehungen? zwischen den Gegenständen. Um dies zu vermeiden, wurden andere Datenbanken entwickelt.

Definition

Eine Objektdatenbank(ODB) oder eine objektorientierte Datenbank basiert auf einem Objektdatenbankmodell, in dem ein Objekt die zentrale Rolle spielt. Ein Objektdatenbankmanagementsystem(ODBMS) ermöglicht die Verwaltung und die Speicherung einer Objektdatenbank(ODB). Für die ODB sind folgende Merkmale charakteristisch:

  • Komplexe Objekte können verwaltet werden, d.h. die Attributwerte eines Objekts können selbst Objektreferenzen sein,
  • Objekte haben eine eindeutige Identität, die von den Attributwerten unabhängig ist,
  • Attributwerte werden gekapselt, so dass ein direkter Zugriff ohne Verwendung von Methoden nicht möglich ist,
  • Einordnung von Objekten in Objektklassen,
  • Anordnung der Objektklassen in die Klassenhierarchie
  • Verwendung der überladenen Methoden bei vererbten Objekten(spätere Bindung)
  • Bereitstellung einer Turing-vollständigen Manipulationssprache,
  • Es können sowohl Standard-Klassen der jeweiligen Sprache als auch selbstdefinierte Klassen verwendet werden.

Viele ODBs unterstützen auch weitergehende Funktionen, wie bspw. Versionierung.

Standardisierung

Wie in vielen Bereichen der Softwareentwicklung ist auch bei den Datenbanken die Standardisierung ein wichtiges Thema. Bekanntestes Beispiel hierfür ist die Structured Query Language, kurz SQL. Mit dem Ziel einen vergleichbaren Standard für Objektdatenbanken zu entwickeln, gründeten mehrere Hersteller im Jahr 1991 die Object Data Management Group, kurz ODMG. Die letzte Version 3.0 des ODMG-Standards wurde im Jahr 2000 veröffentlicht. Mit der Object Query Language wurde eine an SQL angelehnte Abfragesprache definiert. Mehr als zehn Jahre nach der Veröffentlich des ODMG 3.0-Standards hat sich dieser jedoch nicht im mit SQL vergleichbaren Maße durchgesetzt. Insbesondere bei den im Zuge der NOSQL-Bewegung entstandenen Systemen wird dem Standard keinerlei Beachtung geschenkt. Laut [ODMG_2008] hat die Object Management Group im Februar 2006 die Entwicklung einer Version des Standards angekündigt. Seit 2008 gibt es jedoch keine neuen Informationen mehr zu diesem Vorhaben. Die Veröffentlichung eines neuen Standards erscheint damit fraglich.

Vorteile

Zu den Vorteilen eines ODBS gehört eine direkte Kommunikation, d.h. Objekte werden direkt in der DB angesprochen, und nicht zuerst umgewandelt. Die Zusammensetzung komplexer Datenobjekte mittels JOINS über mehrere Datenbanktabellen entfällt. Diese werden über abgespeicherte Beziehungen angesprochen. Der Zugriff auf die Daten wird erleichtert, indem die Zusammenhänge zwischen Objekten bekanntgegeben werden. Das Ergebnis wird in Form von Objekten und nicht in Form einer Datenmenge dargestellt. Die Eingabe einer Objektidentität ist nicht erforderlich, daher wird kein zusätzlicher Surrogate Key benötigt. Die OIDs werden vom System festgelegt.

Nachteile

Obwohl seit 1980er-Jahren verfügbar, haben sich ODBs längst nicht so weit verbreitet wie RDBs. Der derzeitige Anteil am Gesamtmarkt wird auf etwa 1% geschätzt. Die Systeme sind in der Regel sprachspezifisch, bzw. ist der Zugriff nur von wenigen Sprachen aus möglich. Im Zuge der Entwicklungen des Web 2.0 rückten Objektdatenbanken wieder stärker in den Vordergrund. In der jüngeren Vergangenheit waren einige Neuentwicklungen in diesem Bereich zu beobachten, beispielsweise die im Jahr 2004 erschienene ODB db4o. Bekannteste Techniken wie JDBC und Open Database Connectivity?(ODBC) werden von ODB nicht unterstützt.

Transaktionen

Es werden folgende Transaktionszustände unterstützt: Starten, Speichern, Rollback, Update und Active.

Bei den Starten(Öffnen) - Transaktion wird ein Container für die Speicherung von Objekten aufgemacht. Bei der Speichern(Commit) - Transaktion werden die Objekte persistent abgespeichert. Bei der Rollback - Transaktion werden alle umgespeicherten Änderungen zurückgenommen. Bei der Update - Transaktion werden die Änderungen abgespeichert und bei der Active - Transaktion kann abgefragt werden, ob eine bestimmte Transaktion aktiv ist.

Eine Commit - Transaktionen für db4o wäre:

container.store ( neue Auto ( "Kleinwagen" )); container.store ( neue Auto ( "Rennwagen" )); container.commit ();

Eine Rollback - Transaktion für db4o wäre:

container.store ( neue Auto ( "Kleinwagen" )); container.store ( neue Auto ( "Rennwagen" )); container.rollback ();

Es ist möglich, mehrere Transaktionen gleichzeitig durchzuführen, z.B. für db4o:

ObjectContainer rootContainer = Db4oEmbedded.openFile (DATABASE_FILE_NAME);
/*Öffnen der db4o-session. Z. B. am Anfang einer Web-Anfrage*/
ObjectContainer session = rootContainer.ext().openSession (){
/* Operationen auf dem Session-Container auszuführen */
session.store ( neue Auto ( "Rennwagen" ));}
finally {
/* Schließen des Behälters. z. B. wenn der Antrag beendet ist */
session.close ();}










Beispiele von ODB

Es gibt verschiedene Implementierungen von objektorientierten Datenbanken. Zwei davon sind db4o und Zope.?

Quellen:

Kategorie: Neue DB-Entwicklungen, NoSQL, ODBMS, O