Datenbanken für den Einsatz auf Embedded Linux

Transcription

Datenbanken für den Einsatz auf Embedded Linux
Technische Universität Chemnitz
Fakultät für Elektrotechnik und Informationstechnik
Lehrstuhl Schaltkreis- und Systementwurf
Datenbanken für den Einsatz auf
Embedded Linux
Hauptseminar Informations- und
Kommunikationstechnik
Verfasser: Enrico Billich
Studiengang: Informations- und Kommunikationstechnik
Betreuer: DI Daniel Kriesten
Inhaltsverzeichnis
1. EINLEITUNG
4
1.1.
Motivation
4
1.2.
Ziele der Arbeit
4
1.3.
Struktur
4
2. PRÄ-DATENBANK-ÄRA
6
3. MODERNE DATENBANKTHEORIE
7
3.1.
ANSI-SPARC-Architektur
7
3.2.
Komponenten eines Datenbanksystems
7
3.3.
Aufgaben des DBMS
8
4. VERALTETE DATENBANKMODELLE
10
4.1.
Hierarchisches Datenbankmodell
10
4.2.
Netzwerkdatenbankmodell
11
5. RELATIONALES MODELL
12
5.1.
Entity-Relationship-Modell
12
5.2.
Relationales Datenbankmodell
12
5.3.
Beispiele für relationale Datenbanken
14
5.3.1.
5.3.2.
5.3.3.
5.3.4.
Apache Derby
HSQLDB
Firebird
SQLite
6. OBJEKTORIENTIERTES MODELL
14
14
15
15
17
6.1.
Semantische Datenmodellierung
17
6.2.
Objektorientiertes Datenbankmodell
18
6.3.
Beispiele für objektorientierte Datenbanken
20
6.3.1.
6.3.2.
6.3.3.
JDO (Java Data Objects) Datenbanken
EyeDB
db4o
20
21
21
6.4.
Objektrelationales Datenbankmodell
21
6.5.
Beispiele für objektrelationale Datenbanken
22
6.5.1.
6.5.2.
PostgreSQL
OpenLink Virtuoso
7. WEITERE DATENBANKMODELLE
7.1.
Deduktive Datenbanken
22
23
24
24
2
7.2.
Verteilte Datenbanksysteme
24
7.3.
Eingebettete Datenbanken
26
7.4.
Beispiele
26
7.4.1.
7.4.2.
7.4.3.
Objectivity/DB
db.* (db star)
RRDtool
8. ANFORDERUNGEN UND ABSCHLUSSVERGLEICH
26
26
27
28
8.1.
Anforderungen an Datenbank im InnoProfil Projekt
28
8.2.
Vergleichskriterien
29
8.3.
Abschlussvergleich
29
9. GLOSSAR
33
10. LITERATUR UND QUELLEN
35
3
1.
Einleitung
1.1. Motivation
Jeder kennt sie, jeder spricht über sie, doch kaum jemand sieht sie, da sie tief im Verborgenen
ihre Arbeit verrichten. Datenbanken. Ihre Stellung in jedem Unternehmen, vom Großkonzern
bis zum Lagerhaus, ist so herausragend, dass ein Großteil der Arbeitsplätze von ihrem
Funktionieren abhängt. Gehen ihre gespeicherten Daten verloren, bräche die Verwaltung des
Betriebes zusammen und wesentliche Firmeninformationen, die sich über Jahre ansammelten
und ein beachtliches Kapital darstellen, müssten mühsam wieder beschafft werden. Deshalb
ist ein Datenbanksystem auch derartig komplex, um solche Katastrophen zu verhindern und
trotzdem dem Benutzer einen effektiven Zugriff auf den riesigen Datenberg zu ermöglichen.
Dies beweisen sie schon seit den 1960er Jahren und erfreuen sich deshalb überall großer
Beliebtheit. Populäre Beispiele sind dabei heutzutage die bedeutendsten Internetseiten der
Welt wie Google, Ebay und Wikipedia.
Ich wähle dieses Thema, weil Datenbanken mit die wichtigsten Systeme der
Informationstechnik darstellen und Erfahrungen mit Datenbanken vermutlich sehr wertvoll
für zukünftigere Arbeiten sein können. Ebenso der spezielle Einsatzzweck auf Embedded
Systemen repräsentiert einen zusätzlichen Reiz, da Datenbanken für gewöhnlich ihre gesamte
Leistungsfähigkeit erst mit entsprechend großen Hardwareressourcen zeigen können, die in
einem Embedded System nicht vorhanden sind.
1.2. Ziele der Arbeit
Diese Arbeit, die im Rahmen des Hauptseminars Informations- und Kommunikationstechnik
angefertigt wurde, beschäftigt sich mit Datenbanken, die sich zur Speicherung von
Sensordaten auf dem Embedded System des InnoProfile Projektes eignen. Dazu sollen
verschiedene Datenbankmodelle und darauf basierende Datenbanken hinsichtlich ihrer
Möglichkeiten und Eigenschaften verglichen werden. Dabei stehen der Ressourcenbedarf und
die erbrachten Leistungen im Vordergrund.
1.3. Struktur
Das Dokument beginnt mit der Schilderung der Situation bevor es Datenbanken gab. Es
werden kurz die Probleme angesprochen, die sich durch das einfache Dateisystem ergaben
und Datenbanksysteme notwendig machten.
Daran knüpft die moderne Datenbanktheorie an, die in Standardisierungen wie der ANSISPARC-Architektur sinnvolle Grundsätze festlegte, wie eine Datenbank aufgebaut sein muss
und welche Aufgaben die einzelnen Teile zu übernehmen haben. Es werden zudem die
Vorteile von Datenbanken gegenüber Daten in Dateien genannt, die einzelnen Komponenten
eines Datenbanksystems erklärt und welche Anforderungen man heute an solche Datenbanken
stellt.
Bevor es dann zu den modernen Datenbankmodellen kommt, werden aber zunächst noch die
veralteten Datenbankkonzepte der ersten Generation erläutert, auch als satzorientierte
4
bezeichnet, die aber mittlerweile fast überall von den neueren verdrängt wurden und nur noch
ein Nischendasein führen.
Der fünfte Teil erklärt zunächst das Entity-Relationship-Modell, um einen fließenden Einstieg
in die relationalen Datenbanksysteme zu ermöglichen. Dieses Datenbanksystem wird darauf
detailliert erläutert. Es wird gezeigt, wie mit ihm Relationen dargestellt werden und was seine
wichtigsten Eigenschaften sind. Aufbauend auf diesen Erkenntnissen, werden ein paar
Vertreter dieser Datenbankgattung vorgestellt. Zunächst wird aber nur jede Datenbank mit
ihren speziellen Eigenschaften vorgestellt, da erst später zum Ende des Dokuments, ein
abschließender Vergleich inklusive Wertung und Empfehlung erfolgen wird.
Der sechste Teil widmet sich der neuesten Entwicklung der Datenbanksysteme, dem
Objektmodell samt objektorientierten Datenbanken und mit UML auch einer Methode dieses
zu beschreiben. Auch die Kombination aus relationalen und objektorientierten Datenbanken,
die sogenannten objektrelationalen Datenbanken werden kurz erwähnt. Wie schon bei den
relationalen Datenbanken zuvor, werden auch diese erläutert und einige Beispiele genannt.
Als vorletztes werden kurz noch weitere Datenbanksysteme betrachtet, die keinem der
vorgestellten Datenbankmodelle zugeordnet werden können.
Zum Schluss werden die Kriterien erläutert, die für den Einsatz auf dem Embedded System
des InnoProfile Projektes wichtig sind. Vor allem sind dies die Funktionalität und der
Ressourcenbedarf. Zudem erfolgt eine mögliche Modellierung der Daten im ER-Modell. Am
Ende folgen dann die Zusammenfassung und der Vergleich der vorgestellten Datenbanken.
Enrico Billich
Chemnitz, im Mai 2007
5
2.
Prä-Datenbank-Ära
Bevor es Datenbanken gab, wurden sämtliche Daten in Dateien gespeichert. Dabei bestand
ein gewöhnlicher Datensatz aus verschiedenen Feldern, bei Personendaten z.B. aus Name,
Adresse und Telefonnummer. Siehe Abbildung 2-1. Diese Datensätze wurden dann
sequentiell hintereinander in eine Datei geschrieben. So war es relativ kompliziert,
Beziehungen zwischen den Daten herzustellen oder einfache Anfragen zu tätigen, wie z.B. die
Suche nach allen Personen, die in der gleichen Stadt wohnen. Hinzu kam, dass die Art der
Speicherung stets proprietär war und man beim programmieren von Software genau wissen
musste, wie die Trennzeichen zwischen den Feldern und Datensätzen aussahen, bzw. welche
Bedeutung die einzelnen Felder hatten. Wenn man auch nur minimale Änderungen an der
Struktur der Daten vornehmen wollte, musste man sowohl die ganze Datei einlesen und neu
schreiben, als auch sämtliche Software, die darauf zugreift neu programmieren. Solche
Software nannte man dann auch strukturell abhängig von den Dateien. Selbst kleinste
Aufgaben wie das Löschen oder Ändern von einzelnen Datensätzen zogen einen enormen
Bearbeitungsaufwand für den Computer nach sich. Ein weiters Problem war zudem die
Sicherheit, wenn die Daten in einer Textdatei gespeichert wurden. Da reichte mitunter das
einfache Öffnen in einem Editor aus und ein Unbefugter kam an wichtige
Firmeninformationen.
Mustafa Mustermann;
Beispielallee 7;
12345;
Hypohausen;
555-0815;
= Datensatz in Datei
Abbildung 2-1: Datenspeicherung im Dateisystem
All diese Nachteile, vor allem die lange Bearbeitungszeit, führten dazu, dass Daten dann
mehrfach in verschiedenen Dateien gespeichert wurden. Dies konnte zwar
Geschwindigkeitsvorteile bringen und wird auch heute noch bewusst deswegen angewendet,
doch führte dies auch zu unnötigen Redundanzen, welche dann in Inkonsistenzen mündeten,
wenn Änderungen (z.B. Adressänderungen) nur in einer Datei vorgenommen wurden. Diese
Probleme konnten aber auch dann entstehen, wenn mehrere Personen gleichzeitig an
derselben Datei arbeiteten und der eine die Änderungen des anderen überschrieb. Auch fand
das Backup der Daten meist manuell in größeren Perioden statt, was Mehraufwand bedeutete
und nicht stets 100% Datensicherheit brachte.
Mit diesen Problemen konfrontiert, entwickelte man anfangs der 1960er Jahre die ersten
Datenbanksysteme, die als eigenständiges Programm die Datenverwaltung übernahmen und
den Programmen feste Schnittstellen boten. So konnten viele Nachteile der bisherigen
Datenverwaltung beseitigt werden und die zugreifende Software wurde über einen größeren
Zeitraum eingesetzt, bevor Anpassungen nötig wurden.
6
3.
Moderne Datenbanktheorie
3.1. ANSI-SPARC-Architektur
Die ANSI-SPARC-Architektur zerlegt das Datenbanksystem in drei Ebenen (Abbildung 3-1).
Eine interne Ebene, die sich um die Speicherung der Daten auf dem Hardwaremedium
kümmert. Sie bietet der darüber liegenden Schicht Schnittstellen, wodurch sich diese nicht
dafür interessieren muss, wie und auf was genau die Daten gespeichert sind. Damit wird eine
physische Datenunabhängigkeit erreicht. Sollten nun Änderungen an der Speicherstruktur,
z.B. zur Optimierung, vorgenommen werden, muss man die oberen Schichten nicht anpassen.
Die mittlere Ebene ist die konzeptuelle. Diese kümmert sich darum, welche Daten gespeichert
werden und in welcher Beziehung sie zueinander stehen. Der darüber liegenden Schicht wird
dadurch eine logische Datenunabhängigkeit geboten, so dass diese nicht merkt, wenn
Elemente der Datenstruktur umbenannt werden.
Die externe Ebene schließlich bietet verschiedene Sichten für einzelne Benutzergruppen und
Anwendungen auf die gespeicherten Daten, da sich nicht jeder für sämtliche Daten interessiert
oder Zugriffsrechte auf sie hat. Außerdem kann man mit ihnen auch die Daten unterschiedlich
strukturiert präsentieren (virtuelle/berechnete Struktur der Datenbank, nicht tatsächlich
gespeicherte).
Externe
Ebene
Sicht 1
Sicht n
Logische
Datenunabhängigkeit
Konzeptuelle Ebene
Interne
Ebene
Physische
Datenunabhängigkeit
Datenmedium
Abbildung 3-1: ANSI-SPARC-Architektur
Heutige Datenbanksysteme gewährleisten zumeist nur die physische Datenunabhängigkeit, da
die logische schon rein konzeptuell schwierig zu realisieren ist. Auch nutzen Programme, die
auf die Datenbank zugreifen, nur selten die verschiedenen gebotenen Sichten, sondern greifen
direkt auf die Datenstruktur (z.B. Tabellen) zu.
3.2. Komponenten eines Datenbanksystems
Die Datenbanksysteme, die aus diesem Modell hervor gingen (vor allem die relationalen),
gliedern sich in zwei Komponenten (Abbildung 3-2). Die physische Komponente, welche den
gesammelten Datenbestand darstellt, ist die Datenbank. In ihr werden alle Daten in einer
bestimmten Struktur abhängig vom Datenbankmodell abgespeichert. Die Verwaltung dieser
Daten übernimmt das Datenbankmanagementsystem (DBMS). Dieses System ist die
7
eigentliche Komponente, mit welcher der Nutzer kommuniziert. Er stellt Anfragen oder
Befehle, die dann das DBMS in ausführbaren Code umwandelt und auf die Daten zugreift.
Dem gewöhnlichen Nutzer bleibt der direkte Zugang zu den Daten verwehrt, was auch in
seinem Sinne sein sollte, da so die Datensicherheit und Integrität gewahrt wird.
Datenbanksystem
Datenbankmanagementsystem
Datenbank
Abbildung 3-2: Teile eines Datenbanksystems
3.3. Aufgaben des DBMS
In einem Datenbanksystem ist das DBMS die zentrale Verwaltungseinheit. Es übernimmt alle
Aufgaben, die man von so einem System erwartet. Diese Aufgaben sind:
- Benutzerverwaltung, dies beinhaltet die Kontrolle der Zugriffsrechte, die die
berechtigten Benutzer haben, welche Funktionen sie ausführen dürfen und auf welche
Daten sie zugreifen können, dies kann durch verschiedene Sichten auf die Daten
ermöglicht werden
- Mehrbenutzerbetrieb, ermöglicht den Zugriff durch mehrere Benutzer gleichzeitig
und stellt sicher, dass nicht ein Nutzer die gerade gemachten Änderungen eines
anderen unwissentlich überschreibt (Isolationen der Transaktionen voneinander durch
Sperren)
- Datensicherung und Wiederherstellung, kümmert sich um die Sicherung der Daten
(Backup) gegen Verlust und ermöglicht die Wiederherstellung von Daten nach einem
Benutzerfehler (löschen wichtiger Daten), wenn eine Transaktion nicht vollständig
ausgeführt werden konnte (Atomarität, ganz oder gar nicht) oder das System während
einer Transaktion abstürzt (Dauerhaftigkeit, z.B. durch Pufferspeicher)
- Abfragesprache, damit der Nutzer auf die Daten zugreifen kann, z.B. standardisierte
Sprachen wie SQL, die einen Zugriff auf verschiedene Datenbanken unterschiedlicher
Hersteller bietet, die diesen Standard unterstützen
- Schnittstellen für Computerprogramme und Middleware (datenbankspezifische
Treiber), um z.B. über C++ auf Daten zugreifen zu können
- Datenstruktur, Speicherung der Daten je nach Datenbankmodell (Tabelle, Objekt)
und Optimierung der Struktur auf Dateiebene zur schnellen Durchsuchung (B-Baum,
Hashtabellen)
8
-
-
-
Datenintegrität, für die automatische Überprüfung von vorgegebenen Regeln
(Constraints) zur Erhöhung der Konsistenz, z.B. kann eine Matrikelnummer nicht an
mehrere Studenten vergeben werden
Redundanzminderung, indem verhindert wird, dass gleiche Daten mehrfach
gespeichert werden müssen
Physische Datenunabhängigkeit, indem dem Benutzer nur das logische Format der
Daten gezeigt wird und nicht der physische Datentyp, indem der Wert abgespeichert
ist
Datenträgerzugriff und –verwaltung, so muss sich der Nutzer nicht um die Art und
die Optimierung des Zugriffs auf den Datenträger kümmern
Metadatenverwaltung, zusätzliche Informationen über die gespeicherten Daten, z.B.
Tabellennamen
Die vier Eigenschaften Atomarität, Konsistenz (consistency), Isoliertheit und Dauerhaftigkeit
werden in der Informatik auch kurz ACID genannt und beschreiben Mindestanforderungen
für sichere Transaktionen, die von einem Datenbanksystem erwartet werden. Da viele der
oben genannten Aufgaben durch das DBMS übernommen werden, muss sich der Benutzer
nicht drum kümmern und spart so erheblich an Programmieraufwand.
9
4.
Veraltete Datenbankmodelle
4.1. Hierarchisches Datenbankmodell
Die erste Inkarnation eines Datenbankmodells ist das hierarchische. Die Besonderheit dieses
Modells ist, dass es versucht den relevanten Teil der realen Welt durch eine hierarchische
Struktur darzustellen. Deshalb werden die Datensätze (Records) in einer Baumstruktur
angeordnet, bei der ein Knoten genau einen Vorgänger (Eltern/ Parent) und mehrere
Nachfolger (Kind/ Child) besitzt. Der Baum beginnt beim Wurzeldatensatz, der als einziger
keinen Vorgänger hat, und verzweigt sich dann über Kinder und Kindeskinder bis zum
äußersten Datensatz (Blatt), der keine Kinder mehr besitzt. Abbildung 4-1 stellt dies dar.
= Datensatz
Blatt
Blatt
Wurzel
Blatt
= Eltern-Kind-Beziehung
Blatt
Blatt
Abbildung 4-1: Baumstruktur des Hierarchischen Modells
Die Verknüpfungen zwischen den Datensätzen werden Eltern-Kind-Beziehung (Parent-childRelationships) genannt und stellen eine sinnvolle Beziehung zwischen beiden Datensätzen
dar. Mit dieser Struktur sind problemlos 1:1 und 1:N Beziehungen möglich, doch scheitert das
Modell an M:N Beziehungen, also wenn ein Kindknoten mehrere Elternknoten besitzt. Dies
ist dann nur durch redundante Speicherung der Kindknoten oder virtuelle Beziehungen
möglich. Ein ähnliches Problem tut sich auch auf, wenn verschiedene Bäume miteinander
verknüpft werden sollen.
redundante
Datensätze
Professor
hält
Vorlesung 2
Vorlesung 1
Vorlesung 3
hört
Student 1 Student 2 Student 3 Student 1 Student 4 Student 2 Student 3
Abbildung 4-2: Beispiel für Hierarchisches Modell
10
Das System wurde dann schließlich in den 1980er Jahren verdrängt. Gründe dafür waren das
komplizierte Management und die schwierige Implementierung. Auch musste der
Anwendungsprogrammierer die genaue Struktur der Daten kennen und alle Elternknoten
durchlaufen, bevor er die Daten des gewünschten Kindknoten auslesen konnte. Dies bedingte
auch die Umprogrammierung von Software, wenn die Struktur der Datenbank verändert
wurde. Die Datenbank erfüllte also nicht die Bedingung nach struktureller Unabhängigkeit.
Ein weiteres Problem ergab sich außerdem, wenn Elternknoten gelöscht wurden und somit
sämtliche Kinder verloren gingen.
Trotzdem werden solche Datenbanken noch heute angewendet und eignen sich vor allem gut
für hierarchische Daten, wie sie bei XML anfallen (XML-Datenbanken).
4.2. Netzwerkdatenbankmodell
Das Netzwerkdatenbankmodell, das in den 1970er Jahren eingeführt wurde, stellt eine
Erweiterung des hierarchischen Datenbankmodells dar. In diesem sind nun auch M:N
Beziehungen erlaubt, also ein Datensatz kann mehrere Vorgänger besitzen, weshalb das
Eltern-Kind-Bezeichnungsschema aufgegeben wurde.
Professor
hält
Vorlesung 1
Student 1
Vorlesung 2
hört
Student 2
Student 3
Student 4
Vorlesung 3
Abbildung 4-3: Struktur des Netzwerkdatenbankmodells
Die Beziehungen zwischen den Datensätzen (Record) nennt man hier Set-Typen. Sie stellen
1:N Beziehungen zwischen einem Besitzer (Owner) und mehreren Mitgliedern (Members)
her. Für M:N Beziehungen nimmt man als Mittelsmann einen speziellen Record-Typ (KettRecord), der jeweils 1:N Beziehungen zu beiden beteiligten Parteien (Owner der Beziehung)
unterhält.
Trotz dieser Vorteile, behielt dieses Modell wesentliche Nachteile des hierarchischen Modells
bei. So musste man zu mindest einen Teil der Struktur (Substruktur) kennen, um den
gewünschten Datensatz auslesen zu können. Deshalb waren auch die Programme immer noch
strukturabhängig.
11
5.
Relationales Modell
5.1. Entity-Relationship-Modell
Nachdem die bisherigen Datenbankmodelle derartig viele Nachteile bei der Modellierung und
Implementierung zeigten und zudem nicht alle geforderten Eigenschaften erfüllen konnten,
entwickelte man das neue Modell der relationalen Datenbanken. Um diese übersichtlich
modellieren zu können, bedient man sich dem Entity-Relationship-Modell. In diesem werden
die Objekte der realen Welt durch Entities repräsentiert und ihre Eigenschaften durch
Attribute. Entities erkennt man an der rechteckigen Form in der Grafik und Attribute an der
ovalen. Attribute werden mit ungerichteten Kanten mit genau einer Entity verbunden. Die
Beziehungen zwischen Entities erscheinen als Rauten im Schema und werden mit allen
beteiligten Entities verbunden. Auch sie können Attribute besitzen, die man ihnen ebenfalls
mit einer Kante zuordnet. Wegen der Übersicht werden ähnliche Entities zu Entitytypen und
Beziehungen zu Beziehungstypen zusammengefasst. Um zu kennzeichnen, wie viele Entities
eines Typs an einer Beziehung teilnehmen, schreibt man deren Anzahl an die Kante.
Gewöhnlich sind das 1 oder N. Damit sind alle möglichen Beziehungsarten wie 1:1, 1:N, N:1
und M:N beschreibbar.
Name
Studenten N
SWS
Name
Matrikel Nr.
hören
N
M
Vorlesungen
M
N
Note
Vorl. Nr.
halten
prüfen
1
1
Raum
Name
Professoren
Pers. Nr.
Abbildung 5-1: Beispiel für Entity-Relationship-Modell
Um eine Entity aus der Menge aller Entities ihres Types eindeutig zu identifizieren, weist man
einem oder mehreren Attributen eine Schlüsselrolle zu. Sollten keine geeigneten Attribute
vorhanden sein, generiert man ein künstliches, z.B. eine laufende Nummer. Dieses
Schlüsselattribut wird durch Unterstreichen gekennzeichnet. Es gibt noch eine ganze Menge
mehr Verfeinerungen für das Modell, die aber für eine kurze Einführung an dieser Stelle zu
weit gehen würden.
5.2. Relationales Datenbankmodell
Um aus einem Entity-Relationship-Modell ein relationales Datenbankmodell zu machen,
muss man nur die Entities und die Beziehungen samt Attribute in eine Tabellenform bringen.
Die Namen der Entities und der Beziehungen stellen dabei die Tabellennamen dar, die
12
Attribute die Spalten und die einzelnen Datensätze die Zeilen. Um auch die Beziehungen und
die an ihnen beteiligte Entities in der Tabelle eindeutig identifizieren zu können, bedient man
sich bei den Schlüsselattributen dieser Entities. Da jetzt sowohl Entities als auch Beziehungen
in derselben Tabellenform vorliegen, nennt man beides im Datenbankmodell nur noch
Relations.
Studenten
Matrikelnummer
Name
100345
Paul Specht
44783
Robert Pfeiffer
…
…
Vorlesungen
Vorlesungsnummer
Name
SWS
443
Mathematik
8
321
Theoretische Experimentalphysik
2
…
…
…
Hören
Matrikelnummer Vorlesungsnummer
100345
443
100345
321
44783
321
…
…
In dem Beispiel kann man erkennen, dass Paul Specht beide genannten Vorlesungen besucht,
während sich der Robert Pfeiffer nur für Physik interessiert. Durch die Verknüpfung der
Matrikel- und Vorlesungsnummer ist jede Hören-Relation einzigartig. Beides sind deshalb
Schlüssel.
Gerade wegen diesem einfachen Schema, konnte man nun auch komplexe Probleme
modellieren, die vorher mit den alten Datenbankkonzepten nur schwer realisierbar waren.
Erstmals bot das DBMS dem Nutzer eine völlige Trennung von der physischen und
strukturellen Form der gespeicherten Daten, so dass sich dieser nur mit der logischen
Darstellung beschäftigen musste. Nun konnten nicht nur Spezialisten, sondern auch Laien
schnell eine Datenbank aufsetzen und die Vorteile solcher Systeme nutzen. Zudem etablierten
sich standardisierte Zugriffssprachen wie SQL (Structured Query Language), die von
Datenbanken der meisten Hersteller verstanden wurde. Diese Eigenschaften verhalfen den
relationalen Datenbanken schnell zu durchschlagendem Erfolg und sie verdrängten die alten
Datenbankmodelle in den 1980er Jahren fast gänzlich.
Es gibt aber auch einige Nachteile zu nennen. Bevor relationale Datenbanken den großen
Durchbruch erzielten, brauchte man fast 10 Jahren, um von der Theorie zu laufenden
Anwendungen zu kommen. Dies war dem hohen Ressourcenverlangen der neuen
Datenbanken geschuldet, die auf der alten Hardware deutlich langsamer liefen als ihre
hierarchischen Kollegen. Auch täuschte die leichte Handhabung darüber hinweg, dass man
sich vor der Implementierung immer noch genaue Gedanken über die Modellierung der realen
Sachverhalte machen musste. Eine schlechte Modellierung führte zu schlechten Datenbanken,
die dann schließlich die an sie gestellten Aufgaben nicht zur vollsten Zufriedenheit
bewerkstelligen konnten. Zudem werden viele Informationen über ein Objekt verstreut über
13
viele Relationen gespeichert, die dann erst durch ein Programm mit einer Reihe von Anfragen
zusammengesucht werden muss.
5.3. Beispiele für relationale Datenbanken
Da relationale Datenbanken die ältesten der modernen Datenbanksysteme sind, gibt es auch
von ihnen die meisten, am weitesten entwickelten, mit dem größten Umfang und am
häufigsten eingesetzten Vertreter. Die bekanntesten wie Oracle, Microsoft SQL oder MySQL
sind aber nicht primär für die vorgesehene Aufgabe entwickelt worden und deshalb nicht so
geeignet, wie viele andere, die an dieser Stelle kurz vorgestellt werden.
5.3.1. Apache Derby
Apache Derby ist eine Open Source Datenbank der Apache Software Foundation (ASF), die
unter anderem auch mit dem Apache HTTP Server einen der am weitesten verbreiteten
Webserver der Welt entwickelt hat. Die Entwicklung von Apache Derby startete vor über
zehn Jahren bei der kalifornischen Firma Cloudscape Inc. Nach mehreren Übernahmen
landete sie bei IBM, welches die Datenbank als Open Source Software der ASF übereignete.
Vorläufigen Höhepunkt erreichte Apache Derby als es von Sun in Java 6 als Java DB
aufgenommen wurde. So hat sie bis heute eine weite Verbreitung gefunden und wird von
allen drei Unternehmen (Sun, IBM, ASF) unterstützt.
Apache Derby ist in Java entwickelt und somit vor allem für Java Programme gedacht, in die
sie auch eingebettet werden kann. Nichts desto trotz bietet sie auch einen Client-Server Mode,
in dem mehrere Programme sie nutzen können. Es besitzt Schnittstellen für JDBC, ODBC,
Open CLI, Perl und PHP. Der Standard SQL92 wird vollständig, die jüngeren Standards
SQL99 und SQL2003 teilweise unterstützt. Sie kann unter Apache License Version 2.0
genutzt werden (für kommerzielle oder nichtkommerzielle Projekte einsetzbar). Sie bietet
volle ACID Unterstützung. Ihr Footprint beträgt 2MB. Des Weiteren benötigt sie eine Java
Laufzeitumgebung, da sie nur in einer Java Virtual Machine läuft. Ansonsten stellt sie keine
Ansprüche und ist auf jedem System mit diesen minimalen Voraussetzungen lauffähig. Auf
der Homepage findet man eine ausführliche Dokumentation und Anleitung zur Nutzung.
Weiterführende Links:
Apache Derby http://db.apache.org/derby/
Getting Started http://db.apache.org/derby/docs/dev/getstart/
Features http://www.jugs.ch/html/events/slides/051124_Derby.pdf
IBM Cloudscape http://www-304.ibm.com/jct03002c/software/data/cloudscape/
5.3.2. HSQLDB
Ist ebenfalls eine in Java geschriebene Open Source Datenbank. Sie ist weit verbreitet und
kann auch auf eine lange und bewegte Geschichte zurückblicken. Sie wird in vielen Projekten
und Unternehmen eingesetzt. Am bekanntesten ist wohl ihr Einsatz in der
Datenbankanwendung Base in OpenOffice. Man kann sie ebenfalls entweder in eine
Anwendung einbetten oder im Client-Server Mode betreiben. Im zweiten ist ein Zugriff über
den JDBC Treiber möglich. Zudem unterstützt sie große Teile der SQL-Standards (92, 99,
2003). Je nach Version beträgt der Footprint zwischen 100kB und 600kB (je nach Version).
14
Sie bietet viele verschiedene Betriebsmodi an, um z.B. vollständig im Arbeitsspeicher zu
laufen oder nur lesend auf die Daten im Speicher (CD, ROM) zuzugreifen. Es ist aber auch
ein ganz gewöhnlicher Datenbankbetrieb möglich. Größter Nachteil ist wohl die
unvollständige ACID Unterstützung, besonders in Bezug auf die Datenintegrität. Die
Datenbank wird über die BSD License vertrieben. Für den Betrieb benötigt sie als Java
Programm auch eine entsprechende Laufzeitumgebung. Man findet auch viele Quellen, in
denen die Datenbank gut dokumentiert ist.
Die HSQL Datenbank ist einst aus dem Hypersonic SQL Project entstanden. Ein Alternativer
Entwicklungszweig ist die ebenfalls in Java geschriebene Datenbank H2. Es gibt noch
wesentlich mehr relationale Java Datenbanken, von denen aber nur noch McKoi und
JDataStore (Borland) erwähnenswert sind. Weiterführende Links:
Projektseite http://hsqldb.org/
Wikipedia zu HSQLDB http://de.wikipedia.org/wiki/HSQLDB
Wikipedia zu H2 http://en.wikipedia.org/wiki/H2_%28DBMS%29
Wikipedia zu McKoi http://de.wikipedia.org/wiki/McKoi
JDataStore http://www.borland.com/de/products/jdatastore/index.html
Liste mit Java Datenbanken http://java-source.net/open-source/database-engines
5.3.3. Firebird
Die größte Bekanntheit erlangte diese Datenbank wohl, als sie vor Jahren mit Mozillas
Firefox um den Namen stritt, da dieser damals ebenfalls unter dieser Bezeichnung vertrieben
wurde. Es ist heute offensichtlich, wer die Auseinandersetzung gewann. Firebird ist der Open
Source Zweig der Closed Source Datenbank InterBase von Borland. Die Lizenz heißt IDPL,
eine modifizierte Version der Mozilla Public License 1.1. Es gibt sie sowohl in verschiedenen
Server Versionen als auch in einer Embedded Version. An Standards unterstützt sie
vollständig SQL92 und SQL99 bzw. teilweise SQL2003. Sie bietet Zugriffsmöglichkeiten
über JDBC, ODBC, Delphi, Pascal, Perl, Python, .NET, Java, C++ und PHP. Die gebotenen
Funktionen sind enorm vielfältig. Angefangen von klassischen Datenbankaufgaben wie
ACID-Konformität und Backupmanagement bis hin zu integrierten Prozeduren. Da sie in C++
geschrieben ist, braucht sie auch keine zusätzliche Laufzeitumgebung. Dafür kann sie aber
auch nicht so plattformunabhängig sein wie eine Java oder .NET Anwendung. Unter anderem
werden Windows, Linux und diverse UNIX Systeme unterstützt. Der Footprint beträgt 1MB
bis 2,6MB (je nach Quelle), es werden aber 16MB RAM empfohlen. Die Dokumentation ist
selbstverständlich umfangreich und die Entwicklung wird von einer großen Community
vorangetrieben.
Weiterführende Quellen:
Wikipedia über Firebird http://de.wikipedia.org/wiki/Firebird_%28Datenbank%29
Homepage http://www.firebirdsql.org/
5.3.4. SQLite
SQLite ist eine sehr kleine, in C geschriebene Open Source Datenbank, die speziell für den
Embedded Betrieb gedacht ist. Sie untersteht keiner Lizenz, da sie gemeinfrei verfügbar ist.
Zwar bietet sie keinen Client-Server Mode, doch können verschiedene Anwendungen auf die
Datenbasis zugreifen, da sie in einem einzigen File gespeichert wird. Jedoch werden keine
gleichzeitigen Schreibvorgänge unterstützt, da die Datei bei einem Zugriff blockiert wird.
15
Auch der sonstige Funktionsumfang ist eher bescheiden. Dafür ist ihr Footprint einer der
kleinsten aller Datenbanken mit 150kB bis 225kB (je nach verwendeten Features) und die
Geschwindigkeit hoch. Trotz eingeschränkter Funktionalität erfüllt sie die ACID
Anforderungen und unterstützt einen großen Umfang des SQL92 Standards. Sie bietet
Schnittstellen für C/C++, Python, PHP und Tcl. Es werden unter anderem Windows, Linux,
UNIX und OS X unterstützt. Durch die hohe Verbreitung findet man auch viele nützliche
Informationen auf diversen Internetseiten und der Homepage des Projektes.
Weiterführende Links:
Homepage http://www.sqlite.org/index.html
16
6.
Objektorientiertes Modell
6.1. Semantische Datenmodellierung
Seit den 1980er Jahren setzt sich in der Softwareindustrie objektorientiertes Programmieren
durch, bei dem man Klassen von Objekten bildet, denen dann Attribute und Methoden
zugeordnet werden. Diese Klassen können dann wiederum ihre Eigenschaften an neue,
speziellere Klassen weiter vererben. Diese Dinge zu modellieren überstieg die Möglichkeiten
des Entity-Relationship-Modell. Man benötigte nun also ein neues Modellierungswerkzeug,
das nicht nur die Struktur von Objekten und die Beziehungen zwischen ihnen wiedergeben
kann, sondern auch die Semantik (Bedeutung) und das Verhalten (Methoden, die die Daten
manipulieren) darstellt. Schnell entwickelten sich deshalb unterschiedlichste Produkte, von
denen sich aber keines wirklich durchsetzen konnte. Erst als sich ein paar Entwickler auf den
gemeinsamen Standard UML (Unified Modeling Language) einigten, entstand ein weit
verbreitetes und mittlerweile etabliertes Werkzeug.
Student
Vorlesungen
+Hörer
+MatrikelNr : int
+Name : string
hören
1..*
0..*
+NameAendern(NeuName : string) : void
+Notendurchschnitt() : float
1
0..*
Prüfung
+Note : float
1
+VorlesungsNr : int
+Name : string
+SWS : int
+Raum : int
+RaumVerlegen(NeuRaum : int) : void
+Prüfungsstoff
0..*
*
gehaltenVon
1
+Prüfer
geprüftVon
0..*
1
Professor
+Raum : int
+Umziehen(NeuRaum : int) : void
Angestellter
+Name : string
+TelefonNr : int
+Gehalt() : int
Abbildung 6-1: Beispiel für UML
Da UML für viele Anwendungsfälle konzipiert wurde, ist sie in ihrer Gesamtheit ziemlich
gewaltig und komplex geworden. Deshalb wird an dieser Stelle nur an dem einfachen Beispiel
von oben gezeigt, wie man sie einsetzen kann. Zunächst werden aus den Entities Klassen und
aus den Beziehungen Assoziationen. Klassen sind Rechtecke, in denen der Name der Klasse,
deren Attribute und Methoden stehen. Über das + wird die Sichtbarkeit angezeigt und hinter
dem Doppelpunkt steht der Datentyp bzw. Rückgabewert. Die Klasse Student z.B. enthält die
Attribute Name und Matrikelnummer. Zudem auch zwei Methoden, um seinen Namen zu
ändern und seinen Notendurchschnitt zu berechnen.
Eine Assoziation ist eine Linie zwischen 2 Klassen. Je nachdem wie rum man den Pfeil wählt,
hängt es ab, aus welcher Richtung man auf die assoziierten Objekte zugreifen kann (z.B. kann
man anhand der Vorlesung den Professor ermitteln, der sie hält). Den Teilnehmern kann man
zudem auch noch eine Rolle zuweisen. Im Modell ist der Student der Hörer einer Vorlesung.
Außerdem gibt man an, wie viele Instanzen einer Klasse an einer Assoziation teilnehmen. Im
17
Beispiel muss eine Vorlesung von mindestens einem Studenten besucht werden. Ein Student
hingegen kann beliebig viele (auch keine) besuchen.
Die erste größere Neuerung ist die Komposition. Damit modelliert man ein Teil eines
größeren Ganzen. Das bedeutet, dass eine Klasse exklusiv mit einer anderen verbunden ist. In
unserem Fall sind mehrere Prüfungen mit einem Studenten verbunden. Da Prüfungen ohne
Studenten nicht existieren könnten, sind diese vom Studenten existenzabhängig. Dies wird
durch die ausgefüllte Raute angezeigt. Es gibt aber auch nichtexistenzabhängige
Verbindungen, die man Aggregation nennt.
Als letztes sei noch ein Beispiel für die Vererbung erwähnt. Mit einem geschlossenen Pfeil
wird im Bild gezeigt, das Professoren von der Klasse Angestellter abstammen. Diese erben
alle deren Attribute und Methoden und ergänzen diese um eigene.
6.2. Objektorientiertes Datenbankmodell
Da es mit der Zeit immer schwieriger wurde die komplexen Strukturen vor dem Speichern
und nach dem Lesen auf das relationale Modell umzubrechen (objekt-relational-Mapping),
um sie in relationalen Datenbanken speichern zu können, entwarf man das objektorientierte
Datenbankmodell. Dies ermöglichte das direkte Speichern von Objekten inklusive ihrer
Attribute und Methoden. Da jetzt die Daten in einem Datenbankobjekt abgelegt werden, spart
man sich das zusammensuchen der Informationen und entlastet die Anwendung (Vermeidung
von Segmentierung). Trotz dieser Veränderung konnte man weiter die physische
Datenunabhängigkeit und weitere wichtige Datenbankeigenschaften gewährleisten. Ein
großer Vorteil bestand nun auch darin, Funktionen, die mit den Daten in der Datenbank
arbeiten, direkt innerhalb der Datenbank auszuführen. So spart man das Auslesen und
Zurückschreiben der Daten über langsame Kommunikationsverbindungen, da sich die
Datenbank oft auf einem entfernten Server befindet. Der Nutzer musste jetzt auch nur die
Aufrufstruktur der Methode des Objektes kennen, um dessen Attribute zu manipulieren. So
wurde eine Objektkapselung erreicht und der Benutzer sieht nur noch die Operationen.
Um auch bei den objektorientierten Datenbanken eine ähnliche Standardisierung zu erreichen
wie einst bei den relationalen, formierte sich die ODMG (Object Database Management
Group) aus vielen Anbietern von Datenbankprodukten und erstellte ein einheitliches
Objektmodell. Dieses ODMG-Modell bietet Schnittstellen für Programmiersprachen wie C++
zur vereinfachten Datenbankanbindung. Zudem wurde die Anfragesprache OQL (Object
Query Language) entwickelt, die eines Tages für objektorientierte Datenbanken einen
ähnlichen Stellenwert erreichen soll wie SQL bei den relationalen.
Anhand des obigen Beispiels soll das ODMG-Modell näher erklärt werden. Darin stellt jedes
Objekt eine Instanz eines bestimmten Objekttyps (Klasse) dar. Der Objekttyp dient so zu
sagen als Schablone für neue Objekte, die diesem Typ entsprechen. Paul Specht z.B. ist vom
Typ Student. Er besitzt einen Namen, eine Matrikelnummer, kann seinen Namen ändern und
seinen Notendurchschnitt ermitteln. Zudem besucht er noch Vorlesungen und schreibt
Prüfungen. Um ein Objekt eindeutig identifizieren zu können, besitzt jedes einen systemweit
einzigartigen Objektidentifikator. Ähnliches gilt für das Fach Mathematik. Dieses ist vom Typ
Vorlesung, besitzt eine Vorlesungsnummer, einen Namen, eine SWS-Anzahl, einen Raum
und kann verlegt werden. Da nun jedes Objekt so einen Identifikator besitzt, könnte man auf
künstliche Schlüssel verzichten, wenn sie in der realen Welt nicht von Bedeutung wären (z.B.
Matrikelnummer).
18
class Student {
attribute int MatrikelNr;
attribute string Name;
relationship set<Vorlesung> hört
inverse Vorlesung::Hörer;
relationship set<Prüfung>
wurdeGeprüft inverse
Prüfung::Prüfling;
void NameÄndern(string NeuName);
float Notendurchschnitt();
};
ID1
Student
MatrikelNr:
100345
Name:
Paul Specht
hört:
{ID3, ID4}
wurdeGeprüft:
{ID5}
class Vorlesung {
attribute int VorlesungsNr;
attribute string Name;
attribute int SWS;
attribute int Raum;
relationship set<Student> Hörer
inverse Student::hört;
relationship set<Prüfung> warInhalt
inverse Prüfung::Inhalt;
void RaumVerlegen(int NeuRaum);
};
ID3
Vorlesung
VorlesungsNr:
443
Name:
Mathematik
SWS:
8
Raum:
007
Hörer:
{ID1}
warInhalt:
{ID5}
ID2
MatrikelNr:
Name:
Student
44783
Robert Pfeiffer
ID4
VorlesungsNr:
Name:
hört:
wurdeGeprüft:
{ID4}
{}
SWS:
Raum:
Hörer:
warInhalt:
Vorlesung
321
Theoretische
Experimentalphysik
2
854
{ID1, ID2}
{}
Attribute werden in der Klassendefinition mit dem Schlüsselwort attribute und dem Datentyp
deklariert, Beziehungen über realionship. Sollte eine Klasse mehrere Beziehungen eines Typs
besitzen können, wird dies über den Mengenkonstruktor set<…> realisiert. Mit dem
Konstrukt inverse kann man zudem noch die Konsistenz sicherstellen, z.B. damit nicht bei der
Vorlesung Studenten als Hörer eingetragen sind, die gar nicht die Vorlesung besuchen. Bei
den Instanzen werden die ObjektIDs der an der Beziehung teilnehmenden Instanzen vermerkt.
Mengen kann man mit geschweiften Klammern angeben. Wenn an einer Beziehung mehr als
zwei Parteien teil nehmen, muss man dies über einen neuen Objekttyp bewirken.
class Prüfung {
attribute float Note;
relationship Student Prüfling
inverse Student::wurdeGeprüft;
relationship Vorlesung Inhalt
inverse Vorlesung::warInhalt;
relationship Professor Prüfer
inverse Professor::hatGeprüft;
};
ID5
Note:
Prüfling:
Inhalt:
Prüfer:
Prüfung
2,7
ID1
ID3
Prof1
In der Klasse Prüfung gibt es drei Beziehungen. Eine zum geprüften Studenten, eine zum
prüfenden Professor und eine zur Vorlesung, dessen Inhalt Gegenstand der Prüfung war. Die
Klasse Professor mit der Instanz Prof1 wird hier nicht noch einmal explizit dargestellt.
19
Über die Beschreibung von Methoden sei an dieser Stelle nur der Funktionskopf in der Klasse
gezeigt. Er beginnt z.B. bei der Methode NameÄndern mit dem Rückgabedatentyp (void
bedeutet kein Rückgabewert), darauf folgt der Funktionsname und in den Klammern alle
übergebenen Parameter.
Dieses Modell hatte auch einige Nachteile, wobei der erhöhte Ressourcenbedarf für die
Verwaltung der Objekte und die komplexere Implementierung nur von untergeordneter
Bedeutung waren. Vor allem die fehlende Unterstützung der standardisierten Schnittstellen
und Sprachen erforderten oft eine komplette Neuprogrammierung der Programme, wenn man
die Datenbank wechselte. Um trotzdem die Vorteile dieses Datenbankmodells unter
akzeptablen Bedingungen nutzen zu können, entwickelte man objektrelationale Datenbanken,
die Eigenschaften aus beiden Welten vereinten. Heutzutage wurden fast alle bedeutenden
relationalen Datenbanken um objektorientierte Fähigkeiten erweitert, weshalb sie nun zu den
objektrelationalen Datenbanksystemen zählen.
6.3. Beispiele für objektorientierte Datenbanken
6.3.1. JDO (Java Data Objects) Datenbanken
JDO ist eine Spezifikation von Sun, die eine einheitliche Schnittstelle beschreibt, mit dessen
Hilfe die Java Anwendungen ihre Daten in Datenbanken speichern können. Relationale
Datenbanken, die diesen Standard unterstützen, müssen vor der Speicherung und vor der
Übergabe beim Auslesen zunächst ein objektrelationales Mapping vornehmen.
Objektorientierte Datenbanken kommen ohne dieses Mapping aus und können Java Objekte
direkt speichern. Zudem stellen diese Datenbanken auch Schnittstellen nach dem ODMG 3.0
Standard zur Verfügung, damit andere Sprachen wie C++ ebenfalls ähnlich einfach ihre Daten
dort ohne Mapping ablegen können.
Wikipedia http://de.wikipedia.org/wiki/Java_Data_Objects
Eine Umsetzung dieser Spezifikation stellt die Orient ODBMS dar. Sie ist Open Source und
ist sowohl in einer Client-Server als auch einer Embedded Version verfügbar. Sie unterstützt
zusätzlich zu JDO (Java) auch ODMG 3.0 für Zugriffe von C++ Anwendungen und Teile des
SQL92 Standards für Datenmanipulationen an den gespeicherten Objekten. Ihr Footprint
beträgt mindestens 200kB (Embedded Edition) und benötigt eine Java Laufzeitumgebung. Sie
wird unter der Apache Lizenz vertrieben.
Homepage http://lnx.orientechnologies.com/cms/?Solutions:Orient_ODBMS
Eine kommerzielle Alternative ist die ObjectDB. Auch sie bietet eine Embedded (300$) und
eine Client-Server (600$) Version. Die kostenlose Version ist in ihrer Funktionalität
eingeschränkt und darf nur für nichtkommerzielle Anwendungen genutzt werden. ObjectDB
bietet zwar viele Funktionen (Recovery, Garbage Collector, Remote Management), doch kann
man ausschließlich über Java auf sie zugreifen. Ihr Footprint beträgt nur 300kB und sie
benötigt eine Java Laufzeitugebung.
Homepage http://www.objectdb.com/
In Konkurrenz steht der JDO Standard mit der EJB3 (Enterprise Java Beans 3.0)
Spezifikation, da sie ähnliche Funktionalitäten und Performance bietet.
20
6.3.2. EyeDB
EyeDB ist eine junge Open Source Datenbank, die unter der LGPL vertrieben wird. Sie
unterstützt den ODMG 3.0 Standard und die standardisierte Anfragesprache OQL für
objektorientierte Datenbanken. Schnittstellen bringt sie für C++ und Java mit. Sie arbeitet im
Client-Server und bietet darüber hinaus noch eine Menge der üblichen Datenbankfunktionen
(Vererbung, Trigger, ausdrucksstarkes Object Modell, Intgritätsbedingungen, Methoden).
Bisher werden Linux und Solaris sowohl auf 32Bit als auch 64Bit Plattformen unterstützt. Ein
Footprint oder Hardware Anforderungen sind explizit nicht erwähnt, doch kann man bei der
geringen Programmgröße von 500kB bis 2MB ausgehen.
Zwar sind die gegebenen Schnittstellen und Funktionen der Datenbank sehr interessant, doch
sollte man trotzdem nicht ihr junges Alter (Januar 2006) vergessen, aus dem wohl die geringe
Quellenanzahl und die mäßige Dokumentation resultieren. Weiterführende Links:
Homepage http://www.eyedb.org/index.php
6.3.3. db4o
Dies ist eine objektorientierte Datenbank, die sowohl mit Java als auch mit .NET (C#,
VB.NET, Managed C++) zusammenarbeitet. Sie wird unter zwei verschiedenen Lizenzen
vertrieben. Zum einen unter der GPL für nichtkommerzielle Einsatzzwecke und zum anderen
unter einer kostenpflichtigen Lizenz für kommerzielle Produkte. Sie besitzt sowohl einen
embedded als auch einen Client-Server Mode, wobei der erstere der primäre ist und der
zweite vor allem dem Datenaustausch dient. Neben den vielen Funktionen (ACID,
Verschlüsselung, Read Only Modus) ist der größte Vorteil die leichte Benutzbarkeit. Die
Syntax ist sehr einfach und der Entwickler wird durch viele Tutorials unterstützt. Der
Footprint beträgt nur 600kB. Man benötigt zum Betrieb entweder eine Java oder eine .NET
Laufzeitumgebung. Statt eine verbreitete standardisierte Anfragesprache wie SQL oder OQL
zu verwenden, benutzt sie ihre eigene namens Native Queries (NQ). Je nach Version kostet
die kommerzielle Lizenz zwischen 200$ (In-Process) und 1500$ (Client-Server).
Mengenrabatt wird ebenfalls gewährt.
Weiterführende Links:
Produktinformationen
http://www.db4o.com/deutsch/db4o%20Product%20Information%20V6.0(German).pdf
6.4. Objektrelationales Datenbankmodell
Folgende wesentliche Erweiterungen machen objektrelationale Datenbanken aus:
- Große Objekte, Datentypen für große Attributwerte wie Multimediadaten
- Mengenwertige Attribute, wenn eine Entity mehrere Attribute eines Typs besitzt,
z.B. eine Person kann mehrere Adressen oder Telefonnummern besitzen, dann wäre es
sinnvoller statt eine bestimmte Anzahl an Adressfeldern in der Tabelle zu reservieren,
ein Feld vorzusehen, dass eine beliebige Menge dieser Attribute aufnimmt
- Geschachtelte Relationen, sind hilfreich, wenn Attribute wiederum Attribute
besitzen, also ein Attribut eine Entity ist, die einer anderen Entity fest zugeordnet ist,
21
-
-
-
z.B. besteht ein Fahrrad aus 2 Rädern, diese wiederum aus Speichen, Schlauch und
Reifen aufgebaut sind
Typdeklaration, Erweiterung des gegeben Satzes an Typen um eigene, vor allem
genutzt um komplexe Objektstrukturen zu deklarieren und in der Datenbank zu
speichern
Referenzen, durch Referenzen auf Objekte spart man sich die Verwendung von
Fremdschlüsseln zur Herstellung von Beziehungen. Man kann sogar ganz auf manche
Beziehungsrelationen verzichten, wenn man Mengen von Referenzen in bestehende
Entitys als Attribute ablegt, z.B. könnte ein Student Referenzen auf alle Vorlesungen
besitzen, die er besucht.
Objektidentität, werden zum einen für Referenzen benötigt, zum anderen spart man
sich das Anlegen von künstlichen Schlüsseln
Pfadausdrücke, werden notwendig bei der Verwendung von Referenzen
Vererbung, Unterrelationen können von einer übergeordneten Oberrelationen
bestimmte Eigenschaften erben und um spezifische Eigenschaften erweitern
Operationen, man kann nun auch Daten Operationen zuordnen, die direkt in der
Datenbank ausgeführt werden
Eigenschaften der objektrelationalen Datenbanken flossen auch in die Standards SQL99 und
SQL2003 ein.
6.5. Beispiele für objektrelationale Datenbanken
6.5.1. PostgreSQL
Eine der ältesten und fortschrittlichsten objektrelationalen Datenbanken, die es gibt. Sie ist
Open Source und wird unter der BSD Lizenz vertrieben. Sie ist weitgehend konform mit allen
SQL Standards (92 bis 2003) und unterstützt den gesamten Sprachumfang. Auch die ACID
Fähigkeiten sind gegenüber vielen anderen Datenbanken außerordentlich gut umgesetzt.
Zudem werden typische objektrelationale Funktionen wie Prozeduren innerhalb der
Datenbank geboten. Sie bietet Schnittstellen für C/C++, JDBC, ODBC, Java, Tcl, PHP, Perl,
Python, Ruby und .NET. Lauffähig ist sie unter Windows, Linux und UNIX Systemen. Da
PostgreSQL seit über 25 Jahren entwickelt wird, ist der Funktionsumfang gewaltig und
konkurrenzlos zu vielen anderen freien Datenbanken. Deshalb dienen Neuerungen in jüngeren
Versionen vor allem der Benutzerfreundlichkeit und Geschwindigkeit, um gegen populäre
Kontrahenten wie MySQL wieder Boden gut zu machen. Trotz oder gerade wegen dem
großen Umfang ist PostgreSQL eher ungeeignet für den Einsatz in Embedded Systemen, da es
eine Menge Ressourcen verschlingt. Die Dokumentation spricht von mindestens 25MB
Festplattenspeicher und in den Foren ist von 8MB Footprint die Rede, wenn man auf viele
Features verzichtet. Sie wird deshalb in der Abschlussbetrachtung nicht berücksichtigt.
Weiterführende Links:
Wikipedia http://de.wikipedia.org/wiki/PostgreSQL
Homepage http://www.postgresql.org/
22
6.5.2. OpenLink Virtuoso
Ist die Open Source Version (GPL) des Virtuoso Universal Server. Die Datenbank ist wie
PostgreSQL eine objektrelationale und unterstützt weite Teile des SQL Standards (SQL92,
SQL99). Auch ist die Schnittstellenvielfalt mit ODBC, JDBC, .NET und OLE/DB recht groß.
Sie ist für viele Plattformen wie Windows, Linux und Unix verfügbar. Zwar ist der gebotene
Funktionsumfang nicht so umfangreich wie bei PostgreSQL, dafür ist aber auch der
Ressourcenhunger nicht so gewaltig. Mit 10MB Fesplattenspeicher und 2MB Footprint gibt
sie sich schon zu frieden. Allerdings auch erst nachdem man möglichst viele Features vor der
Installation entfernt hat. Dadurch muss man auf nützliche Extras wie eine einfache
Konfigurationsoberfläche verzichten. In den Grundeinstellungen benötigt die Datenbank
500MB bis 800MB. Da diese mühsamen Voreinstellungen sehr lästig sein können und nicht
immer zum gewünschten Ergebnis führen, wird auch an dieser Stelle empfohlen, besser auf
kleinere Datenbanksysteme auszuweichen.
Weiterführende Links:
Wikipedia http://en.wikipedia.org/wiki/Virtuoso_Universal_Server
Homepage http://virtuoso.openlinksw.com/wiki/main/Main/
23
7.
Weitere Datenbankmodelle
7.1. Deduktive Datenbanken
Eine deduktive Datenbank erweitert eine relationale um eine Deduktionskomponente. Das
bedeutet, dass der Datenbank Regeln vorgegeben werden, mit denen sie aus bereits
vorhandenen Daten neue Erkenntnisse gewinnen kann. Z.B. wenn man Geschwindigkeit und
Zeit misst, kann die Datenbank leicht die zurückgelegte Strecke eines Messobjektes
bestimmen. Nachteilig ist jedoch, dass es keine Standards gibt und jede Datenbank ihre eigene
Anfragesprache besitzt, was eine hohe Einarbeitungszeit bedeutet. Ebenfalls sind die
Hardwareanforderungen hoch, damit die deduktiven Datenbanken ihre besonderen Vorteile
ausspielen können.
Besonders Anfang der 1990er machten sich viele Universitäten daran zu beweisen, dass das
Konzept einer deduktiven Datenbank realisierbar ist und ähnlich leistungsfähig wäre, wie
relationale Datenbanken. Da zu der Zeit auch das objektorientierte Modell populär wurde,
stellen viele dieser Systeme eine Mischung von beiden Formen dar. Leider haben alle diese
Entwicklungen das Stadium einer akademischen Anwendung niemals überschritten und nach
wenigen Jahren Arbeit, wurde die Weiterentwicklung eingestellt oder zumindest stark
verzögert. Beispielhafte Vertreter wären ConceptBase der RWTH Aachen, bddbddb (Stanford
Universität) oder Aditi (Universität von Melbourne).
Eine intensive Betrachtung aus dem Jahr 1994 findet man in:
http://delivery.acm.org/10.1145/620000/615193/p107-ramamohanarao.pdf
7.2. Verteilte Datenbanksysteme
Trotz aller Vorteile haben zentrale Datenbanken auch diverse Nachteile. Sie können nur eine
geringe Anzahl von Anfragen gleichzeitig bearbeiten, die Kommunikationswege können
ziemlich lang werden und wenn der Server mit der Datenbank zusammenbricht, ist auch
sämtliche Datenverarbeitung lahm gelegt. Deshalb entwickelte man verteilte
Datenbanksysteme mit folgenden Vorteilen:
- Lastverteilung, wenn die Datenbank auf mehrere Server verteilt ist, können auch die
Anfragen der Benutzer auf diese gleichmäßig verteilt werden
- Standortnähe, die Teilsysteme können näher an den einzelnen Standorten der
Benutzer stehen
- auf den Teilsystemen kann man nur die lokal relevanten Daten speichern und greift
nur dann in Einzelfällen auf die gesamte Datenbank zu (weniger Ressourcen pro
System und Vermeidung der Speicherung von sensiblen Daten auf allen Systemen)
- Ausfallsicherheit, wenn ein Teilsystem ausfällt, können andere dessen Aufgabe
übernehmen oder es ist zumindest nur ein Standort von der Datenverarbeitung
ausgeschlossen und andere können wenigstens noch auf ihre lokalen Daten zugreifen
Es gibt aber auch einige neue Nachteile, die entstehen könnten:
- Inkonsistenz der Daten, wenn sie in mehreren Teilsystemen gespeichert, aber nicht
in allen bei einer Transaktion gleichzeitig verändert werden
- Deadlocks, wenn mehrere Nutzer mehrere Teilsysteme gleichzeitig exklusiv nutzen
wollen (ähnlich den „Speisenden Philosophen“)
- Höherer gesamter Ressourcenbedarf
24
-
-
Sicherheit (Zugriff auf Daten) ist schwieriger zu gewährleisten
Bei Abfragen von Daten, die auf mehrere Systeme verteilt sind, müssen diese
Anfragen auf mehrere Teilanfragen an die Teilsysteme aufgeteilt werden und die
Ergebnisse zusammengefügt
Es existieren keine gemeinsame Standards, um Systeme aus Datenbanken
verschiedener Herstellern aufzubauen (keine heterogenen Systeme, nur homogene)
Chemnitz
New York
DB
Teil 2
DB
Teil 1
Kapstadt
Benutzer
DB
Teil 3
Abbildung 7-1: Beispiel für verteilte Datenbanken
Um ein paar dieser Nachteile zu beheben ist ein erweitertes DBMS nötig. Es löst
Inkonsistenzen auf, indem von ihm Datenveränderungen an allen Teilsystemen vorgenommen
werden. Deadlocks werden aufgelöst. Ein erweitertes Sicherheitssystem wird implementiert.
Doch vor allem realisiert das DBMS eine Transparenz der Datenhaltung und stellt dem
Benutzer die verteilte Datenbank als monolithisches System dar. So kann dieser wie gewohnt
seine Anfragen stellen, ohne sich Gedanken darüber zu machen, wo genau nun die Daten
liegen. Da ein DBMS für verteilte Datenbanken eine Erweiterung für bestehende
Datenbankmodelle darstellt, sind die meisten Umsetzungen bloße Aufsätze auf andere
Datenbanken wie relationale oder objektorientierte. Das DBMS nutzt die Möglichkeiten der
darunterliegenden Datenbank und stellt zusätzlich die Funktionen für verteilte Datenbanken
zur Verfügung. Viele der großen Datenbankhersteller haben deshalb mittlerweile eigene
Realisierungen für ihre Produkte veröffentlicht, es gibt aber auch unabhängige Projekte, die
bekannte freie Datenbanken nutzen.
Bei Verwendung von verteilten Datenbanken ist noch darauf zu achten, welchen Grad an
Verteiltheit man haben möchte. Die niedrigste Form ist die Spiegelung, bei der ein Master auf
viele Slaves vollständig oder teilweise kopiert wird. Änderungen werden nur am Master
vorgenommen und die Slaves übernehmen diese. Solche Systeme sind vor allem bei der
Lastverteilung nützlich. Die nächst höhere Form sind Client-Server Systeme, bei denen an
den Clients zwar Änderungen vorgenommen werden können, diese sich dann aber über den
Server, der alle Daten beherbergt, synchronisieren müssen, damit keine Inkonsistenzen
entstehen. Höchste Verteilung erreichen Systeme, bei denen die Daten vollständig verteilt
sind und kein zentraler Server zur Synchronisation benötigt wird. Bekannteste Umsetzung ist
das Peer-2-Peer-Prinzip, das von diversen File-Sharing-Programmen (Emule, BitTorrent)
genutzt wird.
25
7.3. Eingebettete Datenbanken
Diese Laufen nicht als eigenständiges Programm, sondern können in die Anwendung
vollständig integriert werden, die dann auch exklusiven Zugriff auf sie hat. So spart man sich
die Entwicklung einer komplizierten Datenverwaltung, muss aber auf viele Vorteile einer
richtigen Datenbank (Mehrbenutzerbetrieb) verzichten.
7.4. Beispiele
7.4.1. Objectivity/DB
Objectivity/DB ist vor allem eine objektorientierte Datenbank, mit all ihren Stärken, um
komplexe Objekte einer Anwendung direkt speichern zu können. Doch zudem ist sie auch
eine verteilte Datenbank, die vollständig Client-Zentriert arbeitet und ohne große Server
auskommt, die sich als Flaschenhals im Netzwerk herausstellen könnten. Durch die
Verteilung der Datenbank (vor allem durch replizieren) sind eine hohe Skalierbarkeit und
eventuelle Performancevorteile gegeben. Die Einsatzgebiete sind vielfältig, sowohl
Datenintensive als auch Echtzeit- und Embedded Systeme kommen in Betracht. Sie bringt
Schnittstellen für die bekanntesten objektorientierten Sprachen wie C++, Java, Python,
.NET/C# und Smalltalk mit. Zudem ist auch ein Zugriff über SQL++/ODBC (mit
objektorientierten Erweiterungen) möglich, weshalb sich die Anwendungen keine Gedanken
darüber machen müssen, ob sie nun auf eine relationale oder objektorientierte Datenbank
zugreifen. Auch eine XML Schnittstelle ist vorhanden. Sie ist ACID konform, bietet viele
interessante Funktionen und bietet Support für die Eclipse IDE. Lauffähig ist die Datenbank
auf Windows, Linux und Unix Systemen. Ihr Footprint beträgt 1,5MB. Da Objectivity/DB
eine kommerzielle Datenbank ist, muss man für eine dauerhafte Verwendung eine Lizenz
kaufen. Es steht allerdings zum Testen eine vollfunktionstüchtige 60 Tage Evaluation Version
zu Verfügung. Durch den Kundensupport kann die Evaluierungszeit aber auch auf Nachfrage
verlängert werden. Preise werden nicht genannt, sondern müssen nachgefragt werden
([email protected]). Zusammen aber mit den Supportkosten, können mehrere tausend
Doller pro Jahr zusammenkommen.
Weiterführende Links:
Wikipedia http://en.wikipedia.org/wiki/Objectivity/DB
Homepage http://www.objectivity.com/pages/objectivity/default.asp
7.4.2. db.* (db star)
Die Datenbank db.* kombiniert das relationale Datenbankmodell und das
Netzwerkdatenbankmodell. Damit versucht es die Vorteile beider Modelle zu vereinen und
bietet sowohl schnellen Zugriff als auch einfache Datenmodellierung. Sie bietet verschiedene
Zugriffsmethoden, so dass man die Datenbank gleichzeitig als relationale oder
Netzwerkdatenbank nutzen kann. Zugriffe werden in einer eigenen Sprache vorgenommen,
deren Funktionen in einer Bibliothek zur Verfügung stehen. Daneben kann man aber auch
über einen ODBC Treiber in standardisiertem SQL mit der Datenbank kommunizieren. Sie
bietet volle ACID Konformität. Datensicherheit wird über ein Recovery Mechanismus
gewährleistet.
26
Zwar versteht sich die Datenbank selbst vor allem als embedded Datenbank, doch ermöglicht
sie ähnlich wie SQLite mehreren Benutzern Zugriff auf die Datenbasis, die in einer Datei
gespeichert wird. Vorteilhaft gegenüber SQLite ist allerdings, dass db.* einen sogenannten
„lock manager“ mitbringt, der einen nebenläufigen Zugriff ermöglicht und gleichzeitig die
Datenkonsistenz wahrt. Eine Schnittstelle für Programmiersprachen bringt sie nur für C/C++
mit.
Der Footprint beträgt nur 150kB und die Datenbank ist diversen Betriebsystemen wie
Windows, Linux und Unix lauffähig. Ihr Source Code ist offen gelegt (in C geschrieben). Sie
kann kostenlos in nichtkommerziellen Produkten verwendet werden. Eine kommerzielle
Benutzung ist Mitgliedern des Club ITTIA vorbehalten (Centura Open Source License, Club
ITTIA Terms, ITTIA db.* V2 License). Die Dokumentation ist sehr ausführlich in Anbetracht
des geringen Bekanntheitsgrades dieser Datenbank.
Weiterführende Links:
Homepage http://www.ittia.com/dbstar/dbstar.html
Club ITTIA http://www.ittia.com/community/membership
7.4.3. RRDtool
Die letzte hier vorgestellte Datenbank ist das RRDtool (Round Robin Database). Das
besondere an dieser Datenbank ist, dass man die ihre maximale Größe einstellen kann und bei
Überschreiten die alten Daten durch die neuen überschrieben werden. Einzige Anforderung an
die Daten ist, dass sie Zeitbezogen sind, was auf Messwerte ja zutrifft. Zudem bietet sie viele
zusätzlichen Funktionen, um die Daten visuell aufzubereiten und ansprechend darzustellen.
Vertrieben wird sie über die GPL. Sie bietet Schnittstellen für Perl, Python, Tcl und PHP. Der
Footprint kann nicht genau angegeben werden, da er von der maximalen Größe der Daten
abhängt, die man vorher einstellen muss. RRDtool wird von vielen anderen Programmen
genutzt, die dessen besondere Fähigkeiten zu schätzen wissen und so findet man auch viele
Informationen zur erfolgreichen Nutzung im Internet.
Weiterführende Links:
Homepage http://oss.oetiker.ch/rrdtool/index.en.html
27
8.
Anforderungen und Abschlussvergleich
8.1. Anforderungen an Datenbank im InnoProfil Projekt
Die hauptsächlichste Aufgabe der Datenbank im InnoProfil Projekt ist es, auf dem Embedded
System Messdaten zu sammeln und sie auf Anfrage wieder auszugeben. Deshalb werden von
der Datenbank weniger exotische Zusatzfunktion als vielmehr sichere Datenhaltung und
einfacher Zugriff gefordert. Wesentlich ist zudem auch der Ressourcenhunger der Datenbank.
Dieser Punkt sollte allerdings kein Problem für die hier vorgestellten Datenbanken sein, da
diese unter anderem wegen diesem Kriterium ausgesucht wurden. Außerdem sollte sie Zugriff
mit Hilfe einer standardisierten Anfragesprache bieten und Schnittstellen für die wichtigsten
Programmiersprachen besitzen. Berücksichtigen sollte man auch den Preis, damit das
Endprodukt, dass aus dem InnoProfil Projekt eines Tages hervorgehen könnte, nicht
unerschwinglich ist. Letztes Kriterium wäre noch die Lizenz, die die Form der Verbreitung
des Endprodukts mal mehr oder weniger beschränkt.
Eine Datenmodellierung im Entity-Relationship-Modell zeigt Abbildung 8-1.
Name
Messwert
Messobjekt
O_Nr
1
Messung
Uhrzeit
Typ
N
S_Nr
Name
Sensor
Dimension
Abbildung 8-1: mögliche Modellierung des Systems
Eine Messung wird von einem Sensor an einem Messobjekt vorgenommen. Dabei kann ein
Messobjekt mehrere Sensoren besitzen. Es ist jedoch äußerst selten, dass ein Sensor auch
mehrere Objekte messen kann. Dazu müsste er mobil sein oder die Messungen werden
manuell vorgenommen. Für ein Messobjekt genügt ein Name. Eventuell könnte man ihm auch
noch eine Ortsangabe (GPS-Koordinaten) zuordnen. Der Sensor besitzt ebenfalls einen
Namen. Zusätzlich sind noch der Typ (Temperatur, Druck, Spannung) und die Dimension
(mV, V, kV) der aufgenommenen Daten interessant. Die Messung selbst wird zu einem
bestimmten Zeitpunkt vorgenommen an dem man einen Messwert aufnimmt. Zusätzlich
bekommen Sensor und Messobjekt einen einzigartigen Schlüssel zugewiesen, um Instanzen
mit gleichen Namen auszuschließen. Für die eindeutige Identifizierung einer Messung, müsste
ein Schlüsselpaar aus Messobjekt-Schlüssel, Sensor-Schlüssel und Uhrzeit ausreichen. Die
Uhrzeit müsste aber hinreichend genau festgehalten werden, falls Messungen in kurzen
Abständen erfolgen.
28
8.2. Vergleichskriterien
Die ersten beiden Vergleichskriterien sind der Entwicklungszeitraum und die Version. Zwar
sagen diese beiden Werte nicht wirklich viel über die tatsächliche Einsatzfähigkeit aus, doch
bekommt man zu mindest eine Ahnung, wie lange sich die Entwickler schon Gedanken
deswegen machen. Als nächsten werden die beiden Modi Embedded und Client-Server
betrachtet, um die Einsatzwecke abschätzen zu können.
Der nächst größere Block beinhaltet die wichtigsten Datenbankfunktionen wie ACID
Konformität, Backupmanagement und integrierte Prozeduren. Darauf folgen die
Anforderungen an den Arbeitsspeicher und eventuelle Empfehlungen des Herstellers.
Der dritte Abschnitt zählt die Anfragesprachen und Schnittstellen zu Programmiersprachen
auf. Besonders werden an dieser stelle standardisierte Anfragesprachen und die
Programmiersprache C++ berücksichtigt.
Als letztes folgen Kriterien wie die einsetzbaren Plattformen, nötige Zusatzsoftware, Qualität
der Dokumentation, Lizenz und Preis.
8.3. Abschlussvergleich
In die Endrunde haben es die vier relationalen Datenbanken Apache Derby, HSQLDB,
Firebird und SQLite geschafft. Außerdem die beiden objektorientierten Vertreter EyeDB und
Orient ODBMS. Das RRDtool wird außer Konkurrenz präsentiert, da es zwar keine
Datenbank im eigentlichen Sinn ist, sich aber speziell für das Speichern von Messwerten
eignet. Die anderen wurden entweder wegen zu großem Ressourcenbedarf, zu hohem Preis
und zu kleinen Funktionsumfang disqualifiziert. Nichts desto trotz kann man in den
vorherigen kurzen Präsentationen der anderen Datenbanksysteme viele wichtige
Informationen finden, die an dieser Stelle als Kriterium dienten.
Die folgenden Informationen stammen alle aus den Dokumentationen der
Datenbankherstellern oder Quellen, die sich intensiv mit einer der Datenbanken
auseinandergesetzt haben.
Apache Derby
HSQLDB
Firebird
1997
10.2.2.0
vor 2001
1.8.0.7
1981
2.0.1
Entwicklung seit
Aktuelle Version
Client-Server Mode
Embedded Mode
ACID
Ja
Ja
Ja
Backup Management
Ja
Multiuser fähig
Benutzerverwaltung/
Zugriffsrechte
Integrierbare Prozeduren
und Trigger
Ja
Ja
Objekte speicherbar
(außer BLOB)
Siehe JDO
Ja (Prozeduren,
Funktionen,
Triggers)
Ja
Ja
Nein, nicht
vollständig
Ja, über Redo
Logging File
Ja
Ja
Ja (Java
Prozeduren,
Funktionen,
Triggers)
Siehe JDO
Ja
Ja
Ja
Ja
Ja
Ja
Ja (PSQL
Prozeduren,
Trigger)
Siehe JDO
29
Sonstige Features
Data Caching,
Verschlüsselung
2MB
k.A.
Memory Only
Mode, Read Only
Mode, Disk-based
Mode
600kB
k.A.
Footprint
Empfohlener
Festplattenplatz
Empfohlener RAM
Systembelastung
(Prozessor)
SQL92
SQL99
SQL2003
OQL
ODMG 3.0
JDO
1MB bis 2,6MB
k.A.
k.A.
Gering
k.A.
Gering
16MB
Gering
Ja
Teilweise
Teilweise
Nein
Nein
Mit JPOX
Teilweise
Teilweise
Teilweise
Nein
Nein
Mit JDO Genie
Sonstige Anfragesprachen
C++ Schnittstelle
ODBC Treiber
JDBC Treiber
Sonstige
Programmiersprachen und
Schnittstellen
Nein
Ja (über ODBC)
Ja
Ja
Java, Perl, PHP,
Python, .NET, Open
CLI
Nein
Nein
Nein
Ja
Java
Ja
Ja
Teilweise
Nein
Nein
Mit JDO Genie,
TJDO oder LiDO
Nein
Ja
Ja
Ja
Delphi, Pascal,
Perl, Python,
.NET, Java und
PHP
IDEs
Eclipse, NetBeans,
JBuilder
Unabhängig
Eclipse, JBuilder
unabhängig
befriedigend
JRE oder JDK (ab
1.3)
Unabhängig
gut
JRE oder JDK (ab
1.4)
Betriebssysteme
Architekturen
Dokumentation
Zusätzliche Software
benötigt
Nennenswerte
Erweiterungen
Bekanntheit (Google
Ergebnisse)
Lizenz
Preis
Unabhängig
Windows, Linux,
Unix (Solaris, HPUX), FreeBSD,
OS X
x86, Sparc
gut
keine
JayBird
545000
919000
Über 2 Millionen
Apache 2.0 License
Kostenlos
BSD License
Kostenlos
IDPL
Kostenlos
SQLite
Entwicklung seit
Aktuelle Version
Client-Server Mode
Read Only Mode
möglich (für CDs)
2000
3.3.17
Kein Server, aber mehrere
Programme können auf
Datenbasis zugreifen
Ja
EyeDB
Orient
2006
2.7.10
k.A.
2.3
Ja
30
Embedded Mode
ACID
Backup Management
Ja
Ja
Nein
Multiuser fähig
Kein gleichzeitiger
Schreibzugriff, nur
nacheinander (Datei wird
gelocked)
Nein
Benutzerverwaltung/
Zugriffsrechte
Integrierbare Prozeduren
und Trigger
Objekte speicherbar
(außer BLOB)
Sonstige Features
Footprint
Empfohlener
Festplattenplatz
Empfohlener RAM
Systembelastung
(Prozessor)
SQL92
SQL99
SQL2003
OQL
ODMG 3.0
JDO
Sonstige
Anfragesprachen
C++ Schnittstelle
ODBC Treiber
JDBC Treiber
Sonstige
Programmiersprachen
und Schnittstellen
IDEs
Betriebssysteme
Architekturen
Nein
k.A.
Ja (Recovery
System)
Ja
Ja
k.A.
k.A.
Ja
Ja
Ja (Methoden,
Trigger)
Ja
Ja
Da Daten in einer oder
mehreren Dateien gespeichert
sind, können sie leicht auf
andere Systeme übertragen
und weiterverwendet werden
150kB bis 225kB
Vererbung,
Integritätsbedingungen,
Objektmodel
Intelligent
Cache
Ca. 2MB
k.A.
k.A.
Mindestens
200kB
k.A.
k.A.
Gering
k.A.
Gering
k.A.
Gering
Teilweise
Nein
Nein
Nein
Nein
Nein
Nein
Nein
Nein
Nein
Ja
Ja
Nein
Nein
Teilweise
Nein
Nein
k.A.
Ja
Ja
Nein
Ja
Ja
Ja
Java, Basic Dialekte, Delphi,
Python, Perl, PHP, .NET,
Ruby, Smalltalk, Tcl und viele
mehr
Ja
Nein
Nein
Java, CORBA
Ja
Nein
Nein
Java, XML
Windows, Linux, Unix, OS X
k.A.
Linux, Unix
32 und 64Bit
Prozessoren
ausreichend
keine
Unabhängig
Unabhängig
Ja (Funktionen, Trigger)
Nein, nur BLOB
Dokumentation
Zusätzliche Software
benötigt
befriedigend
keine
Nennenswerte
sqlite3 (zum anlegen eines
Ja
Ja
ungenügend
JRE oder
JDK (ab
1.3)
oExplorer
31
Erweiterungen
Bekanntheit (Google
Ergebnisse)
Lizenz
Datenbankfiles)
Über 8 Millionen
11400
742
Public Domain
LGPL
Preis
Kostenlos
Kostenlos
Apache 2.0
License
Kostenlos
In anbetracht der Anforderungen des InnoProfil Projektes erscheint mir persönlich die SQLite
Datenbank für ausreichend. Sie bietet einen einfachen Zugriff für mehrere Programme, hat
etliche Schnittstellen, eine große Gemeinde an Nutzern, geringe Hardwareanforderungen und
ausreichend Funktionen. Zwar bietet sie kein Backup und keinen Server Mode, um eventuell
mit anderen Teilnehmern im Netz Daten auszutauschen oder Daten zu sichern, doch kann
man dies mit eigenen Programmen oder Beispielprogrammen anderer Nutzer nachrüsten. Bei
Nichtgefallen bietet sich alternativ immer noch Firebird oder das RRDtool an. Da besonders
das RRDtool gerade für die gedachte Aufgabe konzipiert wurde, ist es zumindest eine gewisse
Beachtung wert.
Weiterführende Links:
Vergleich relationaler Datenbanken bei Wikipedia
http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems
32
9.
Glossar
ACID
Synonym für Mindestanforderung, die eine Datenbank erfüllen muss. Steht
für Atomarität, Konsistenz (consistency), Isoliertheit und Dauerhaftigkeit.
ANSI
Amerikanisches Standardisierungsgremium ähnlich der ISO.
Backup
Englisch für Datensicherung. Auf einem anderen Medium wird eine Kopie
von Daten erzeugt, damit diese nach einem Crash des Primärmediums nicht
verloren gehen. Für ein stets aktuelles Backup müssten nach jeder Änderung
der Daten Sicherungen vorgenommen werden. Dies erledigt das DBMS oder
ein Festplatten-Raid System.
ClientServer
Mode
Modus einer Datenbank, in dem mehrere Programme auf die Daten der
Datenbank zugreifen können. Datenbank arbeitet als eigenständiges
Programm. Sie stellt Schnittstellen bereit, damit Programme auf dem
gleichen Rechner oder Programme auf entfernten Rechnern über Netzwerk
auf sie zugreifen können.
DBMS
Datenbankmanagementsystem, siehe 2.3. Je nach Datenbankmodell gibt es
auch andere Abkürzungen. RDBMS (relationale), VDBMS (verteilte
Datenbanken), ODBMS und OODBMS (objektorientierte)
Embedded
Mode
Modus einer Datenbank, indem sie in eine Anwendung integriert wird und
nur diese auf die Daten Zugriff hat.
ER-Modell
Entity-Relationship-Modell. Werkzeug zur Modellierung von Daten für
relationale Datenbanken.
Footprint
Minimum an Speicherbelegung der Datenbank.
JDBC
Standardisierte Treiberschnittstelle, um von Java Programmen auf die
Datenbank zugreifen zu können.
JDO
Java Data Objects. Standard von Sun um Java-Objekte direkt in Datenbanken
speichern zu können.
JRE
Java Runtime Environment. Laufzeitumgebung, die Java Programme
benötigen.
MySQL
Populärste der freien Datenbanken.
ODBC
Standardisierte Treiberschnittstelle, um von Programmen auf die Datenbank
zugreifen zu können, z.B. mit C++.
ODMG
Standardisierungsgremium. Entwarf unter anderem den ODMG Standard und
die Anfragesprache OQL.
OQL
Standardisierte Anfragesprache für objektorientierte Datenbanken. Hat sich
33
im Gegensatz zu SQL bisher kaum durchgesetzt. Liegt eventuell auch an
ihrem jungen Alter von nur wenigen Jahren.
SQL
Anfragesprache für relationale Datenbanken. Heutzutage wird das Kürzel
gewöhnlich als Structured Query Language interpretiert. Hat sich weitgehend
als Standard durchgesetzt. Verschiedene Standardisierungsversion schreiben
unterschiedliche Funktionalitäten vor. Es gibt SQL92, SQL99 und SQL2003.
UML
Werkzeug für semantische Datenmodellierung
XML
Beschreibungssprache für strukturierte Daten.
34
10. Literatur und Quellen
[Gei06]
Geisler, Frank: Datenbanken – Grundlagen und Design. 2. Auflage, mitpVerlag, 2006
[Kem06]
Kemper, Alfons; Eickler, André: Datenbanksysteme – Eine Einführung. 6.
Auflage, Oldenbourg Wissenschaftsverlag GmbH, 2006
[Vos00]
Vossen,
Gottfried:
Datenmodelle,
Datenbanksprachen
und
Datenbankmanagementsysteme. 4. Auflage, Oldenbourg Wissenschaftsverlag
GmbH, 2000
[Heu00]
Heuer, Andreas; Saake, Gunter: Datenbanken: Konzepte und Sprachen, , 2.
Auflage, mitp-Verlag, 2000
[Wik07]
http://www.wikipedia.org/
Diverse Artikel in der englischen und deutschen Version. An den
entsprechenden Stellen in dieser Arbeit als weiterführende Links angegeben.
35