Performance
Auf der Homepage gibt der SQLite-Autor an, dass seine Datenbank bei den "üblichen Operationen" doppelt so schnell wie PostgreSQL oder MySQL sei, und liefert auch die Daten seines Benchmark-Tests. Solche Benchmarks sind mit Vorsicht zu genießen, weil sich je nach Auswahl der Testfälle und des darauf zugeschnittenen Tunings fast jedes gewünschte Ergebnis produzieren lässt. Um seine Behauptung zu überprüfen, waren einige Messungen mit SQLite, PostgreSQL ("The world\'s most advanced Open-Source Database") und MySQL ("The world\'s most popular Open-Source Database") nötig.
Bei allen Tests griff nur das Testprogramm auf die Datenbank zu, bei PostgreSQL und MySQL über Unix-Domain-Sockets, um eventuellen Netzwerk-Overhead zu vermeiden. Bei allen Datenbanken blieb die Default-Konfiguration erhalten, wobei bei MySQL der Tabellentyp »InnoDB« zum Einsatz kam, da sonst wichtige Datenbankfunktionen nicht verfügbar sind. Der C++-Code der Testprogramme liegt auf dem Server des Linux-Magazins[6].
Die in Tabelle 2 dargestellten Ergebnisse zeigen ein differenzierteres Bild als die SQLite-Homepage:
-
Bei Abfragen, die nur eine einzige Tabelle betreffen, ist
SQLite tatsächlich schneller.
-
Bei komplexeren Abfragen über mehrere Tabellen kann SQLite
jedoch auch deutlich langsamer sein. Bei Abfrage 3 war SQLite sogar
unbenutzbar langsam, was aber durch Indizes auf allen
Fremdschlüsselfeldern behebbar war. Doch auch mit Indizes war SQLite noch langsamer als PostgreSQL (Abfrage 4).
Im Vergleich von PostgreSQL und MySQL ergeben sich keine extremen Ausreißer wie bei SQLite, aber es gibt doch zwei interessante Beobachtungen:
-
Bei MySQL führen die Indizes kurioserweise zur
Verlangsamung der Abfragen. Das kann daran liegen, dass bei diesen
Abfragen so viele Daten gelesen werden müssen, dass sowieso
ein Tablescan nötig wird und die Indexzugriffe nur zusätzlicher Overhead sind.
-
Die Inserts bei PostgreSQL dauern länger, was wohl an MVCC
(Multi Version Concurrency Control) liegt. Das ist ein modernes
Verfahren zur Transaktionsisolation, das aufwändiger zu
implementieren ist als klassische Sperrverfahren, aber im
Mehrbenutzerbetrieb höhere Parallelität ermöglicht.
Die Insert-Geschwindigkeit von SQLite verhält sich so, wie in Abbildung 2 dargestellt: Bei einer neu angelegten Datenbankdatei sind die Inserts deutlich schneller als bei einer bereits verwendeten, aber leeren Datei (nach jedem Test wurden alle Tabellen wieder gelöscht). Nach einer Einschwingphase stellt sich ein stabiler Wert ein, der die Grundlage für Tabelle 2 ist.

|
Abbildung 2: Die Insert-Geschwindigkeit von SQLite hängt davon ab, wie oft die Tabellen bereits gelöscht und wieder angelegt wurden.
|
|
|
|
Nr.
|
Beschreibung
|
Laufzeit SQLite 2.8.13
|
Laufzeit PostgreSQL 7.3.4
|
Laufzeit MySQL 4.0.20
|
|
1
|
110100 Inserts mit 12 Commits
|
54,6547 s (siehe Text)
|
55,1268 s
|
30,5562 s
|
|
2
|
»SELECT MAX()« auf 100000 Tupel
|
0,1259 s
|
0,2763 s
|
1,3934 s
|
|
3
|
3-Tabellen-Join ohne Indizes
|
1104,7357 s
|
0,1357 s
|
0,4055 s
|
|
4
|
3-Tabellen-Join mit Indizes
|
0,5690 s
|
0,1905 s
|
1,8336 s
|
|
5
|
Gruppieren einer Tabelle ohne Index
|
0,3644 s
|
1,6467 s
|
0,6772 s
|
|
6
|
Gruppieren einer Tabelle mit Index
|
0,3627 s
|
0,7406 s
|
1,2660 s
|
|
7
|
Gruppieren zweier Tabellen ohne Index
|
1,2646 s
|
3,5776 s
|
0,9119 s
|
|
8
|
Gruppieren zweier Tabellen mit Index
|
1,2659 s
|
2,4646 s
|
2,0457 s
|
|
9
|
Anlegen zweier Indizes für Join-Felder
|
4,8363 s
|
0,1905 s (inkl. »ANALYZE«)
|
7,3118 s
|
Fazit
Die Testergebnisse sollte niemand überbewerten. Sie bestätigen vor allem die Erkenntnis, dass durch geschickte Auswahl der Testabfragen jede Datenbank als die schnellste erscheinen kann. SQLite ist eine attraktive Möglichkeit, Anwendungen mit einer schlanken Datenspeicherkomponente zu versehen. Die SQL-Schnittstelle bietet eine Flexibilität, die mit selbst gestrickten Dateiformaten nur schwer erreichbar ist.
Anders als bei den bekannteren kommerziellen Desktop-Datenbanken Paradox oder Access ist keine weitere Konfiguration auf dem Zielsystem erforderlich. Eine mit der SQLite-Library gelinkte Anwendung ist ohne weiteres Zutun lauffähig. Das Einsatzgebiet reicht von Embedded-Systemen über Desktop-Anwendungen bis hin zu Tests für komplexere Client-Server-Anwendungen. Die Vielfalt an Skriptsprachen-Interfaces macht SQLite auch für jene Programmierer interessant, die mit C auf dem Kriegsfuß stehen. (ofr)
|
Christoph Dalitz lehrt an der Fachhochschule Niederrhein in Krefeld unter anderem das Fach Datenbanksysteme. Dabei kommt im Praktikum nicht SQLite zum Einsatz, sondern PostgreSQL.
|
Copyright © 2002 Linux New Media AG
| Whitepaper |
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)
Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
|
Usage Landscape Enterprise Open Source Data Integration
Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|