Die Verwendung von SQLite in Unternehmensanwendungen
Heben Sie bei den meisten Unternehmensanwendungen den Deckel an, und Sie werden feststellen, dass sie auf irgendeine Weise strukturierte Daten speichern und verwenden können. Ob es sich um eine Client-seitige App, eine App mit einer Web-Front-End oder eine Edge-Geräte-App handelt, die Chancen stehen gut, dass eine Unternehmensanwendung eine Datenbank benötigt. In vielen Fällen reicht eine eingebettete Datenbank aus. Eingebettete Datenbanken sind leichtgewichtig, kompakt und portabel – und für einige Anwendungen sind sie eine bessere Wahl als ein traditioneller Server.
SQLite ist eine einbettbare Open-Source-Datenbank, die in C geschrieben ist und mit herkömmlichem SQL abfragbar ist. SQLite ist darauf ausgelegt, schnell, portabel und zuverlässig zu sein, egal ob Sie nur Kilobyte an Daten oder mehrere Gigabyte große Blobs speichern. Wir werden uns SQLite genauer ansehen, einschließlich wann und wie es verwendet wird und wie es im Vergleich zu Alternativen wie MySQL, MariaDB und anderen beliebten eingebetteten Datenbanken abschneidet.
Wofür wird SQLite verwendet?
Der häufigste und offensichtlichste Anwendungsfall für SQLite ist die Verwendung als konventionelle, tabellenorientierte relationale Datenbank. SQLite unterstützt Transaktionen und atomare Vorgänge, sodass ein Programmabsturz oder sogar ein Stromausfall Sie nicht mit einer beschädigten Datenbank zurücklässt. SQLite verfügt auch über andere Funktionen, die in höherwertigen Datenbanken zu finden sind, wie Volltextindizierung und Unterstützung für große Datenbanken – bis zu 281 Terabyte mit Zeilengrößen von bis zu 1 GB.
SQLite bietet auch eine schnelle und leistungsstarke Möglichkeit, Konfigurationsdaten für ein Programm zu speichern. Anstatt ein Dateiformat wie JSON oder YAML zu analysieren, kann ein Entwickler SQLite als Schnittstelle zu diesen Dateien verwenden – oft schneller als manuell damit zu arbeiten. SQLite kann mit In-Memory-Daten oder externen Dateien (z. B. CSV-Dateien) arbeiten, als wären sie native Datenbanktabellen, was eine praktische Möglichkeit bietet, diese Daten abzufragen. Es unterstützt auch JSON-Daten nativ, sodass Daten als JSON gespeichert oder direkt abgefragt werden können.
Vorteile von SQLite
SQLite hat viele Vorteile, angefangen bei seiner Plattform- und Sprachportabilität. Hier sind die wichtigsten Vorteile der Verwendung von SQLite:
- Es ist plattformübergreifend: Einer der größten Vorteile von SQLite ist, dass es praktisch überall ausgeführt werden kann. SQLite wurde auf eine Vielzahl von Plattformen portiert: Windows, macOS, Linux, iOS, Android und mehr. Insbesondere Windows-Benutzer können vorkompilierte Binärdateien für reguläres Win32, UWP, WinRT und .Net verwenden. Was auch immer das Bereitstellungsziel Ihrer App ist, es gibt wahrscheinlich eine Edition von SQLite dafür oder eine Möglichkeit, den C-Quellcode auf dieses Ziel zu portieren.
- Es ist mit den meisten Programmiersprachen kompatibel: Anwendungen, die SQLite verwenden, müssen nicht in einer bestimmten Sprache geschrieben sein, solange es eine Möglichkeit gibt, externe Bibliotheken, die in C geschrieben sind, zu binden und mit ihnen zu arbeiten. Die Binärdateien von SQLite sind eigenständig, sodass sie keine besondere Magie erfordern, um bereitzustellen – Sie können sie einfach in dasselbe Verzeichnis wie Ihre Anwendung kopieren.
- Ja, SQLite funktioniert mit Python: Viele Sprachen haben Hochsprachbindungen für SQLite als Bibliothek und können diese in Verbindung mit anderen Datenzugriffsschichten für die Sprache verwenden. Python bündelt beispielsweise die SQLite-Bibliothek als Standardkomponente mit der Standardversion des Python-Interpreters. Darüber hinaus haben Dritte eine Vielzahl von ORMs und Datenschichten geschrieben, die SQLite verwenden, sodass Sie nicht darauf beschränkt sind, auf SQLite über Roh-SQL-Strings zuzugreifen (was nicht nur umständlich, sondern auch potenziell gefährlich ist).
- Eigenständig: Da SQLite eine einzelne eigenständige Binärdatei ist, ist sie einfach mit einer App bereitzustellen und bei Bedarf mit der App zu verschieben. Jede von SQLite erstellte Datenbank besteht auch aus einer einzelnen Datei, die mithilfe von SQL-Befehlen kompaktiert oder optimiert werden kann.
- Drittanbietererweiterungen: Drittanbieter-Binärerweiterungen für SQLite fügen noch mehr Funktionalität hinzu. SQLCipher fügt 256-Bit-AES-Verschlüsselung zu SQLite-Datenbankdateien hinzu. Ein anderer, sqlean, erweitert die nativen Funktionen von SQLite um viele weitere, die standardmäßig nicht verfügbar sind, wie die Generierung von UUIDs oder die Übereinstimmung mit regulären Ausdrücken.
- Umfangreiche Werkzeuge: Viele andere Drittanbieterprojekte bieten zusätzliche Werkzeuge für SQLite, wie die Visual Studio Code-Erweiterung, die das Durchsuchen von Datenbanken innerhalb von Visual Studio Code ermöglicht, oder die interaktive Befehlszeile LiteCLI für SQLite. Eine kuratierte Liste von SQLite-Ressourcen auf GitHub enthält viele weitere Optionen.
- SQLite ist Open Source: Schließlich ist der Quellcode von SQLite Public Domain, sodass er in anderen Programmen ohne praktische Einschränkungen wiederverwendet werden kann.
SQLite vs. MySQL
SQLite wird häufig mit MySQL verglichen, dem weit verbreiteten Open-Source-Datenbankprodukt, das ein fester Bestandteil heutiger Anwendungsstapel ist. Obwohl SQLite MySQL ähnelt, gibt es gute Gründe, je nach Anwendungsfall eine der beiden Lösungen zu bevorzugen. Das Gleiche gilt für MariaDB, eine weitere beliebte Datenbank, die manchmal mit SQLite verglichen wird.
Datentypen
SQLite hat relativ wenige native Datentypen – BLOB
, NULL
, INTEGER
, REAL
und TEXT
. MySQL und MariaDB hingegen verfügen über dedizierte Datentypen für Datum und Uhrzeit, verschiedene Genauigkeiten von Ganzzahlen und Fließkommazahlen und vieles mehr.
Wenn Sie relativ wenige Datentypen speichern oder Ihre Datenschicht zur Validierung der Daten verwenden möchten, ist SQLite nützlich. Wenn Sie möchten, dass Ihre Datenschicht ihre eigene Validierung und Normalisierung bereitstellt, sollten Sie MySQL oder MariaDB verwenden.
Konfiguration und Abstimmung
Die Konfigurations- und Abstimmungsoptionen von SQLite sind minimal. Die meisten seiner internen oder Befehlszeilenoptionen befassen sich mit Randfällen oder Abwärtskompatibilität. Dies passt zur Gesamtphilosophie von SQLite, da die Standardoptionen für die meisten gängigen Anwendungsfälle gut geeignet sind.
MySQL und MariaDB bieten eine Vielzahl von datenbank- und installationspezifischen Konfigurationsoptionen – Kollationen, Indizierungen, Leistungsoptimierung, Speicher-Engines usw. Die Vielzahl von Optionen liegt daran, dass diese Datenbankprodukte weit mehr Funktionen bieten. Sie müssen sie möglicherweise mehr anpassen, aber dies liegt wahrscheinlich daran, dass Sie von Anfang an mehr tun möchten.
Einzelbenutzer- vs. Mehrbenutzerdatenbank
SQLite eignet sich am besten für Anwendungen mit einem einzigen gleichzeitigen Benutzer, beispielsweise in Desktop- oder mobilen Apps. MySQL und MariaDB sind darauf ausgelegt, mehrere gleichzeitige Benutzer zu verarbeiten. Sie können auch Cluster- und Scale-Out-Lösungen bereitstellen, während SQLite dies nicht kann.
Einige Projekte fügen SQLite Skalierungsfunktionen hinzu, jedoch nicht als direkten Ersatz für MySQL oder MariaDB. Canonical hat seine eigene Variante von SQLite, dqlite, erstellt, die für eine Skalierung über einen Cluster ausgelegt ist. Die Daten werden durch einen Raft-Algorithmus konsistent gehalten, und das Bereitstellen von dqlite hat nur marginalen administrativen Aufwand im Vergleich zu SQLite.
SQLite vs. eingebettete Datenbanken
SQLite ist bei weitem nicht die einzige einbettbare Datenbank. Viele andere bieten ähnliche Funktionen, betonen jedoch unterschiedliche Anwendungsfälle oder Bereitstellungsmodelle.
- Apache Derby: Ein einbettbarer SQL-Motor, auch von Oracle als Java DB neu verpackt. Da Apache Derby in Java geschrieben ist und die JVM erfordert, ist er hauptsächlich für die Einbettung in Java-Apps konzipiert.
- Firebird Embedded: Die Firebird-Datenbank, die plattformübergreifend läuft und viele High-End-Funktionen bietet, ist als Bibliothek verfügbar, die in einer Clientanwendung eingebettet werden kann. Ihr Funktionsumfang ist mit dem von SQLite vergleichbar, aber SQLite hat eine deutlich größere Benutzercommunity und Unterstützungsbasis.
- Realm: Eine leistungsstarke relationale Datenbank, die für mobile Umgebungen (hauptsächlich Android) entwickelt wurde und auch Desktop-Umgebungen wie Windows unterstützen kann. Realm ist objektbasiert und verwendet keine SQL-Abfragen – gut, wenn Sie kein SQL verwenden möchten, aber schlecht, wenn SQL vertraut und komfortabel ist. Realm ist jetzt ein MongoDB-Projekt und wird mit dem Vorbehalt geliefert.
Fazit
Zusammenfassend lässt sich sagen, dass SQLite eine ausgezeichnete Wahl für viele Anwendungsfälle ist, insbesondere für solche, die eine einfache, zuverlässige und leichtgewichtige Datenbanklösung erfordern. Mit seiner breiten Unterstützung, Plattformunabhängigkeit und der Vielzahl von Funktionen bietet SQLite eine robuste Alternative zu anderen Datenbanklösungen, insbesondere in eingebetteten Systemen und Einzelbenutzeranwendungen.