In-Memory Datenbanken auf den Zahn gefühlt!

Werbung
In-Memory Datenbanken auf den Zahn gefühlt!
Roland Stirnimann
Senior Consultant
Jan Ott
Senior Consultant
09. August 2011
In-Memory Datenbanken geniessen deutlich weniger Bekanntheitsgrad als
herkömmliche Datenbanken wie zum Beispiel Oracle oder Microsoft SQL Server. Glaubt
man der Werbung, so versprechen die Hersteller wie Oracle deutlich kürzere
Antwortzeiten. Doch was sollte beachtet werden beim Einsatz von In-Memory in der
Praxis? Ist In-Memory in jedem Fall schneller? Macht In-Memory die herkömmlichen
Datenbanken allenfalls überflüssig? Fragen wie diese soll der Artikel klären um bei der
Wahl der richtigen Technologie behilflich zu sein, da die wichtigsten Vor- und Nachteile
bekannt sind.
1.
Einleitung
Dieser Artikel zeigt verschiedene Aspekte zum Thema In-Memory Datenbanken auf. Einerseits
wird der Markt beleuchtet um einige Produkte beim Namen zu nennen. Andererseits findet eine
Gegenüberstellung statt um die Unterschiede in Bezug auf Funktionsumfang und Einsatzbereich
aufzuzeigen. Im letzten Teil werden Schlussfolgerungen und Entscheidungskriterien aus eigener
Erfahrung der beiden Autoren aufgelistet.
2.
In-Memory Produkte auf dem Markt
Bei der Suche in Wikipedia erscheint eine umfangreiche Liste mit In-Memory Datenbanken. Der
Artikel beschränkt sich auf 4 Produkte aus zwei unterschiedlichen Kategorien. Zwei davon
gehören klar in den High-End Bereich während sich die anderen beiden selber in kleineren bis
mittleren Umgebungen einordnen.
Obwohl einige Produkte auf dem Markt sind konnte sich die Technologie im High-End Umfeld
„noch“ nicht richtig ins Rampenlicht befördern.
2.1 Oracle TimesTen
TimesTen wurde im Juni 2005 von Oracle aufgekauft und seither weiterentwickelt in den
Versionen 6.0, 7.0 und aktuell 11.2.
TimesTen spielt aufgrund seiner umfangreichen Funktionen in der oberen Liga mit. In höheren
Sphären bewegt sich auch der Preis, was bei Oracle nicht überrascht. Fairerweise gilt zu
erwähnen, dass Oracle die Weiterentwicklung zügig voran treibt und am Input von Kunden
interessiert ist. Der Hersteller bietet das Produkt für Linux/Unix wie auch für Windows Systeme
an.
Nebst vielen Konfigurationsvarianten kann TimesTen unter anderem als Cache für Oracle Tabellen
verwendet werden. Dabei können partielle oder ganze Tabellen als so genannte Cache Groups in
TimesTen geladen werden. Eine Cache Group kann als read only wie auch read write definiert
sein. Spezielle Prozesse sorgen dafür, dass die Daten auf Wunsch synchron oder asynchron in die
Oracle Datenbank geschrieben werden. Auch das automatische Nachladen von neuen Daten aus
dem Oracle RDBMS funktioniert problemlos. Leider wird als RDBMS nur Oracle für die Cache
Groups unterstützt. Abbildung 1 zeigt wie die Tabelle customer aus dem Oracle RDBMS als
Cache Group namens target_customers in TimesTen geladen ist. Die Cache Group ist nur ein
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 21.09.2011 . Seite 2 / 10
logisches Gebilde. Für den Entwickler repräsentiert sie schlussendlich eine gleichnamige Tabelle
customer in TimesTen.
Abbildung 1: Cache Group in TimesTen (Quelle: Oracle Technology Network. URL:
http://download.oracle.com/docs/cd/E13085_01/doc/timesten.1121/e13073/img/cachegroup1table.gif [Stand:
05.08.2011])
Damit der In-Memory Datenbank nicht der Platz ausgeht bietet TimesTen zwei Typen von Aging
an: time-based oder LRU (least recently used).
Das Innenleben von TimesTen passt sich immer mehr an das Oracle RDBMS an. So findet der
DBA zum Beispiel ein Data Dictionary vor mit Tabellen wie DBA_USERS oder DBA_OBJECTS
und der Datenbankentwickler freut sich über die Unterstützung von PL/SQL. Aber aufgepasst:
Nicht alle Packages und SQL Funktionen aus dem Oracle RDBMS sind auch in TimesTen
vorhanden.
Der Zugriff aus der Applikation heraus kann via OCI oder über JDBC erfolgen. Letzteres ist sehr
gut ausgebaut.
Für High-Availability Zwecke verfügt TimesTen über diverse Replizierungsvarianten (synchron
und asynchron, uni-/bidirektional) um beim Ausfall einer TimesTen Instanz sofort einen Failover
zu initiieren.
2.2 SolidDB von IBM
Ähnlich wie TimesTen ging es zwei Jahre später auch SolidDB. Das Produkt wurde der zweiten
Hälfte 2007 von IBM aufgekauft und seither weiterentwickelt. Die aktuelle Version 6.5 von
SolidDB ist für die Power7 Prozessorgeneration optimiert. Nebst IBM AIX ist die In-Memory
Datenbank auch für andere Plattformen wie Linux, Windows oder Solaris verfügbar. Die
Verwaltung von SolidDB erfolgt über die gleiche SQL Schnittstelle wie jene von IBM DB2.
Gegenüber den Entwicklern präsentiert sich SolidDB ähnlich einer DB2 Instanz. Im Bezug auf
Funktionsumfang und Einsatzgebiete ähnelt SolidDB stark der Oracle Lösung TimesTen. So kann
„SolidDB Universal Cache“ ebenfalls als Cache von Tabellen verwendet werden, welche aus einer
IBM DB2, Microsoft SQL Server, Informix, Sybase oder Oracle Datenbank stammen können.
Betreffend Performance versprechen beide Hersteller bis zu zehn-mal schnellere Antwortzeiten.
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 21.09.2011 . Seite 3 / 10
Im Bereich der Hochverfügbarkeit bietet das IBM Produkt die Replikation zu einer weiteren
Instanz an wie auch ein entsprechendes Session Failover, falls sich die aktive Instanz
„verabschiedet“. Dies könnte beispielsweise dann der Fall sein, wenn die Datenbank voll ist.
Dagegen bietet SolidDB entsprechende Aging Mechanismen an um alte oder nicht mehr
verwendete Daten aus der In-Memory Datenbank endgültig zu entfernen.
2.3 HSQLDB – HyperSQL Database
In der Kategorie, in der sich HSQLDB bewegt, gibt es am meisten Mitspieler. Die komplett in Java
geschriebene Datenbank steht unter der BSD-Lizenz und ist im OpenSource wie auch im
kommerziellen Bereich sehr verbreitet. Die In-Memory Datenbank wird für viele Applikationen als
Persistenzlayer eingesetzt wie beispielsweise bei OpenOffice, Mathematica und InstallAnywhere.
Zudem umfasst eine komplette Installation gerade nur 1.3 Megabyte in der aktuellen Version 2.2.
Der Funktionsumfang kommt bei weitem nicht an jenen von TimesTen oder SolidDB heran.
HSQLDB sieht sich selber im Bereich der klein bis mittelgrossen In-Memory Datenbanken. Die
Tabellen in HSQLDB können wahlweise als reine In-Memory Tabellen oder als diskbasierte bzw.
persistente Tabellen angelegt werden. Bei Letzteren werden zusätzlich drei weitere Typen
unterschieden:



MEMORY (default): Daten/Objekte sind in Form eines SQL Scripts auf der Disk
gespeichert.
CACHED: Binäres Dateiformat auf der Disk. Nicht alle Daten sind im Memory geladen.
TEXT: Tabellen Daten sind in CSV Dateien gespeichert.
Jede der genannten diskbasierten Typen garantiert bei einem Serverabsturz die Persistenz der
„committed“ Transaktionen.
HSQLDB lässt sich entweder im so genannten „in-process“ oder im „server mode“ betreiben.
Während „in-process“ schneller ist, bietet der „server mode“ mehr Flexibilität, da auch über das
Netzwerk auf die Datenbank zugegriffen werden kann. Beim „in-process“ Mode befindet sich die
Applikation und die Datenbank im selben Memory Bereich. Es geht keine Zeit durch die Latenz
auf dem Netzwerk verloren.
Die Verwaltung geschieht über ein einfaches Kommandozeilen-programm oder ein webbasiertes
GUI. Besonders zu erwähnen ist bei HSQLDB die sehr gute Dokumentation in vielen Büchern.
Dort geht es meist um die Verwendung der Datenbank im Zusammenhang mit Frameworks wie
Hibernate oder Spring. Die Featureliste von HSQLDB hebt besonders den guten SQL Support
hervor. Weiter bietet HSQLDB ebenfalls umfangreiche Java bzw. JDBC Unterstützung, da die
ganze Datenbank zu 100% in Java geschrieben ist.
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 21.09.2011 . Seite 4 / 10
2.4 SQLite
SQLite mischt im gleichen Segment wie die HSQLDB mit und sieht sich selber nicht im High-End
Bereich sondern bei Applikationen, die ihre Daten in einem cross-plattform Format speichern
möchten. Sehr geeignet erscheint SQLite, die übrigens in ANSI C geschrieben ist, auch als
embedded Datenbank bei Gadgets wie MP3 Player oder PDA sowie für kleine Websites. Das
Produkt ist unter einer Public Domain Lizenz verfügbar und kann kostenlos heruntergeladen
werden.
Im Gegensatz zu den meisten anderen Produkten braucht SQLite keine Installation oder
Konfiguration. Die sehr kleine Datenbank von wenigen 100 Kilobytes besitzt keinen eigenen
Serverprozess (serverless). Der Applikationsprozess liest die Daten selber direkt aus der
Datendatei ins Memory. Laut Hersteller ist die Datenbank nicht besonders für hohe Parallelität
geeignet, obwohl mehrere Applikationen die gleiche Datendatei verwenden können.
SQLite wird beispielsweise als Persistenzlayer von Firefox, Skype, Apple oder Adobe verwendet.
Allein das breite Einsatzgebiet deutet darauf hin, dass die Datenbank mit sehr vielen
Programmiersprachen verwendet werden kann. Nebst der Unterstützung für alle gängigen
Plattformen kann die Datenbank relativ einfach für weitere Betriebssysteme portiert werden.
Als einzige Administrationsmöglichkeit von ausserhalb der Applikation bietet SQLite ein
Command Line Interface an.
2.5 Zusammenspiel mit In-Memory Datenbanken
Wie so oft gibt es auch für In-Memory Datenbanken keine out-of-the-box Lösung. Sofern für eine
Plattform bzw. Programmiersprache ein Treiber existiert kann eine In-Memory Datenbank wie ein
herkömmliches RDBMS angesprochen werden. Im High-End Bereich müssen
gezwungenermassen spätestens nach einem ersten enttäuschenden Versuch weitere
Überlegungen im Bezug auf die Architektur und Implementierung gemacht werden. Die Probleme
liegen im Detail. Folgende Tatsachen sprechen häufig für den Einsatz einer In-Memory
Datenbank:






Hoch frequentierter read only Daten Cache (Lookup Tabellen)
Datenbank kann/soll nahe bei der Applikation sein (gleicher Server, direct Connect)
Entlastung der physikalischen Datenbank (Anzahl Transaktionen, I/O, User Sessions)
Temporäre Daten mit vielen Zugriffen (lesend und schreibend)
Datenverlust kann in Kauf genommen werden
Kurze, einfache SQL Statements kommen zur Ausführung
Eine In-Memory Datenbank ist ein Feature für Applikationen mit dem Performance Gewinne
erzielt werden können. Um das zu erreichen, muss die Applikation an die Funktionen der InMemory Datenbank angepasst werden, nicht umgekehrt. Der Einsatz einer In-Memory Datenbank
garantiert keine Performance Gewinne.
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 21.09.2011 . Seite 5 / 10
3.
Allgemeine Funktionsweise von In-Memory Datenbanken
Beim Durchlesen der Dokumentation fällt schnell auf, dass sich alle In-Memory Datenbanken
ähnlicher Prinzipien bedienen. Vor allem im Bereich der komplexeren Produkte wie TimesTen
oder SolidDB sind viele Gemeinsamkeiten festzustellen.
1. Datenhaltung
Beim Starten der Datenbank lädt das System die gesamten Daten von der Disk ins
Memory, damit zur Laufzeit keine Daten nachgeladen werden müssen.
2. Checkpoint Files/Snapshot Images:
Die geänderten Daten aus dem Memory werden in regelmässigen Abständen mit dem
persistenten Speicher (Disk) abgeglichen.
3. Transaction Logs
Zwischen den einzelnen Checkpoint Vorgängen werden die laufenden Änderungen in
Transaction Logs geschrieben, um nach einem Crash ein Rollforward machen zu können.
4. ACID Prinzip
Wie herkömmliche RDBMS unterstützen auch In-Memory Datenbanken das ACID Prinzip.
5. High-Availability
In-Memory Produkte wie IBM SolidDB oder Oracle TimesTen bieten High-Availability in
Form von Replikation an. Bei einem Crash kann ein Failover auf die verbleibende Instanz
stattfinden.
6. Direct Connect
Die Applikation hat die Möglichkeit die In-Memory Datenbank direkt in ihren eigenen
Adressbereich zu laden um jeglichen Overhead wie z.B. Netzwerk zu eliminieren.
Abbildung 2 stellt ein diskbasiertes und ein In-Memory System (TimesTen) dar. Der grösste
Unterschied besteht in der Datenhaltung. TimesTen liest beim Starten der Datenbank alle Daten
aus dem Checkpoint File in das Memory. Ein diskbasiertes RDBMS lädt erst bei Bedarf zur
Laufzeit die gewünschten „Data Pages“ von der Disk in den Buffer Pool nach. Dadurch
vereinfachen sich die Zugriffsalgorithmen bei In-Memory Sytemen massiv was wiederum zu einer
besseren Performance führt. Der „Query Optimizer“ kann bei TimesTen direkt auf alle Daten im
Memory zugreifen ohne kostspieliges I/O zu erzeugen.
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 21.09.2011 . Seite 6 / 10
Abbildung 2: Diskbasierend versus In-Memory (Quelle: Oracle Technology Network. URL:
http://download.oracle.com/docs/cd/E13085_01/doc/timesten.1121/e14261/img/findingrecords.gif [Stand: 05.08.2011])
4.
„On-Disk“ oder „In-Memory“ – Entscheidungskriterien
Bei der Produktwahl spielen im In-Memory Bereich die Grösse der Datenbank (in Bytes) und die
Anzahl Transaktionen bzw. die Concurrency eine wichtige Rolle. Die folgende Grafik zeigt
schematisch, wo sich die im Artikel erwähnten Produkte etwa einordnen lassen.
Abbildung 3: Einordnung der In-Memory Produkte
Die folgende Tabelle stellt typische Eigenschaften der beiden Systeme gegenüber, die bei der
Entscheidung für oder gegen In-Memory behilflich sein können.
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 21.09.2011 . Seite 7 / 10
In-Memory
Applikation und In-Memory auf gleichem
Server, verbunden mit „direct connect“
Keine blockierenden Disk I/O Operationen
beim Commit da nur im Memory
Verlust von „committed“ Daten möglich da nur
im Memory (Log Buffer).
Wenig Backup Features, Datenverlust beim
Servercrash möglich
Wenig Analysetools bei PerformanceProblemen (kein SQL elapsed time)
Kein parallel Query
Wenig Wissen vorhanden
5.
On-Disk
Verschiedene Server für Applikation und
Datenbank
Blockierende I/O Operationen beim Commit
da Log Buffer auf Disk geschrieben wird
ACID garantiert
Umfangreiche Features im Backup Bereich,
Restore/Recover ohne Datenverlust
Umfangreiche Tools und Reporting
Möglichkeiten
Parallel Query vorhanden
Viel Wissen vorhanden
Erfahrungen mit TimesTen
Die überaus interessante Projektarbeit der beiden Autoren brachte insgesamt zwei Tatsachen zu
TimesTen bzw. In-Memory Datenbanken ans Tageslicht:
1.) Die Umstellung zu In-Memory ist ein Projekt!
Eine Applikation lässt sich nicht einfach mal schnell umstellen und alles läuft 10-mal
schneller. Eine 1:1 Migration ist eine Illusion!
2.) Interessante Herausforderungen
Der Know-how Aufbau, sowie das Austesten und Anpassen der Applikation bieten ein
sehr interessantes und neues Aufgabengebiet.
Mit dem sehr guten Oracle RDBMS Know-how stellten die beiden Autoren während dem Projekt
mehrmals fest, dass Dinge aus dem Oracle RDBMS nicht implizit für TimesTen bzw. In-Memory
gelten. Deshalb zieht eine Umstellung zu In-Memory Tätigkeiten wie Code Änderungen,
Fehlersuche und kontinuierliche Performance Analyse mit sich. Das Umschreiben von Code ist
meistens wegen fehlenden Packages/Funktionen in TimesTen oder zu komplexer Queries
erforderlich. Als Beispiel mussten „connect by“ Ausdrücke in SQL geändert werden um den
gleichen Output ohne „connect by“ zu erreichen. Diese Arbeit ist betreffend Aufwand keinesfalls
zu unterschätzen, denn es stellt auch erfahrene Entwickler vor Herausforderungen eine „connect
by“ Klausel wie „zu alten Zeiten“ zu implementieren. Ein kleines Beispiel mit der Oracle EMP
Tabelle soll dies exemplarisch zeigen:
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 21.09.2011 . Seite 8 / 10
Die „Connect by“ Klausel in Oracle funktioniert in TimesTen leider nicht.
SELECT *
FROM emp
START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr;
Also könnte der Entwickler auf die Idee kommen das selbe Resultat mit der WITH Klausel zu
erzeugen. Leider ist aber auch WITH nicht unterstützt in TimesTen.
WITH
employees (empno, name, job, mgr, hierlevel)
AS
(SELECT empno, ename, job, mgr, 1
FROM emp
WHERE mgr IS NULL
UNION ALL
SELECT e.empno, e.ename, e.job
, e.mgr, m.hierlevel + 1
FROM emp e
JOIN employees m
ON(m.empno = e.mgr)
)
SELECT *
FROM employees;
Also bliebt in TimesTen nur noch die prozedurale Lösung mit PL/SQL, die hier aufgrund des
Umfangs nicht abgebildet ist.
Die Lösungssuche und Analyse der Probleme wird weiter erschwert durch die sehr rudimentären
Tools in TimesTen wie auch vom knappen Know-how Angebot, sei es via Google oder „My
Oracle Support“. Deshalb gibt es viel Bedarf an „Learning by Doing“!
Perfekt formatierte Performance Reports, wie sie vom Oracle RDBMS bekannt sind, fehlen in
TimesTen. Somit kämpft sich der DBA mit SQL Queries durch die internen Data Dictionary
Views. Zusätzlich erschwerend ist der Umstand, dass TimesTen keine „elapsed time“ für SQL
Queries aufzeichnet. Während der zeitraubenden Umstellung sank auch das Verständnis der
Applikationsentwickler, da diese der Meinung waren, eine Datenbank sei doch eine Datenbank.
Schlussendlich kämpft der DBA an zwei Fronten. Nichts desto trotz macht die Arbeit viel Spass
und bringt neue Erkenntnisse mit sich. Dies in einem noch sehr jungen und dynamischen Umfeld,
welches aktuell noch relativ überblickbar ist, im Vergleich zu einem Oracle RDBMS mit
hunderten von Features.
Zusammenfassend gesagt braucht die Projektplanung genug Zeitpuffer für Know-how Aufbau und
Testing bzw. Analyse und Anpassungen. Wird dies von Anfang an berücksichtigt bleiben auch die
rauchenden Köpfe aus, vor allem diejenigen der Projektleiter, die versuchen im Zeitplan zu sein.
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 21.09.2011 . Seite 9 / 10
6.
Fazit
Schöne neue Welt, alles schneller, alles besser. Das wurde uns schon von anderen Technologien
versprochen. In-Memory ist schneller. Doch es gibt ein Aber. Es geht nicht einfach damit ein paar
Tabellen ins Memory zu stellen. Es braucht Überlegungen und da fängt die Herausforderung an.
Die Erste ist das fehlende Wissen nicht nur in der eigenen Firma sondern auch ausserhalb.
Applikationen können nicht einfach kopiert werden. Häufig fehlen dann die entsprechenden SQL
Features (connect by) oder der Datentyp ist ein bisschen anders. Doch es gibt auch Positives. InMemory ist schnell. Richtig eingesetzt sehr schnell. Legt man alles auf den gleichen Server,
arbeitet mit "direct connect" und nutzt kleine und simple SQL‘s, dann „fliegt“ die In-Memory
Datenbank und verkraftet enorme Mengen an Abfragen.
Die Frage ist also: Brauche ich In-Memory? Geht es nicht mit der "normalen" Datenbank? Würde
ein Tuning helfen oder ein grösserer Server oder mehr Memory das Problem lösen? Bin ich bereit,
die Mehrkosten für die zusätzliche Hard- und Software, Spezialisten, neue Maintenance und
Backup/Recovery Mechanismen zu zahlen?
Wenn ja, dann wird es spannend und ihre Daten lernen das Fliegen.
7.
Quellen
Wikipedia: “In-memory database“. http://en.wikipedia.org/wiki/In-memory_database [Stand
08.08.2011].
Oracle Technology Network: “TimesTen In-Memory Database Documentation”.
http://download.oracle.com/docs/cd/E13085_01/welcome.html [Stand: 08.08.2011].
IBM: “solidDB Universal Cache”. http://www-01.ibm.com/software/data/soliddb/universalcache/features.html?S_CMP=rnav [Stand: 08.08.2011].
HyperSQL DB: “HyperSQL version 2.2 documentation”.
http://hsqldb.org/web/hsqlDocsFrame.html [Stand: 08.08.2011].
SQLite DB: „SQLite Documentation“. http://sqlite.org/docs.html [Stand: 08.08.2011].
[email protected] . www.trivadis.com . Info-Tel. 0800 87 482 347 . Datum 21.09.2011 . Seite 10 / 10
Herunterladen