- Nach ein paar Tagen mit SQLite sind mir einige überraschende Nachteile aufgefallen
ALTER COLUMN wird nicht unterstützt. Die offizielle Empfehlung zum Ändern einer Spalte lautet: „Neue Tabelle erstellen“
DROP CONSTRAINT wird nicht unterstützt. Die offizielle Empfehlung zum Entfernen einer Constraint lautet: „Neue Tabelle erstellen“
- SQLite hat keine Datentypen für Spalten. Datentypen (es gibt nur fünf) gelten nur für Werte, daher kann praktisch alles überall hineingeschrieben werden
- Wenn man eine Spalte mit einem nicht unterstützten oder nicht existierenden Typ anfordert, führt SQLite den falschen Vorgang ohne Warnung oder Fehler aus. Ein Schema wie
CREATE TABLE my_table (id bigserial, messages jsonb[]) scheint zu funktionieren, sodass ich am ersten Tag fälschlicherweise dachte, SQLite unterstütze Serial und Arrays
- Mit
CREATE TABLE my_table (...) STRICT kann man erzwingen, dass nur einer der fünf unterstützten Typen integer, real, text, blob, any erlaubt ist
- In letzter Zeit gab es viel Interesse an der neuen
jsonb-Unterstützung von SQLite. Anders als bei Postgres ist jsonb jedoch kein echter Datentyp, sondern ein Format, das von den eingebauten jsonb*-Funktionen ein- und ausgegeben wird. Bei dauerhafter Speicherung ist es blob, also einer der fünf Grundtypen
- Andere sehr wichtige Typen wie
timestamptz fehlen ebenfalls. Wenn man Datum/Uhrzeit will, speichert man sie als Unix-Timestamp-integer oder als String im ISO8601-Format; für solche Operationen gibt es mehrere eingebaute Funktionen
- SQLite hat beeindruckende Features rund um Streaming, die ich gern ausprobieren würde, aber die anfängliche DX-Erfahrung war definitiv etwas holprig
- Manchmal frage ich mich, von welcher Erzählung ich mich zu sehr mitreißen lasse. Ist Postgres zum Beispiel wirklich die beste Datenbank der Welt? Diese Erfahrung hat meine Überzeugung jedenfalls gefestigt. Ja, Postgres ist die beste
6 Kommentare
Es wirkt, als wolle man nicht SQLite, sondern eher SQLHeavy.
Es gibt diese Datenbank und jene Datenbank. Ich hatte den Eindruck, dass SQLite auf seine eigene Weise nach einer bestimmten Philosophie betrieben wird.
Warum wollte man SQLite wie Postgres verwenden?
Das fühlt sich an wie jemand, der zum ersten Mal Linux benutzt und sagt: „Nicht einmal Hancom Office funktioniert richtig, und die Spiele, die ich spiele, laufen auch nicht. Ein Betriebssystem ist eben doch Windows!“
Ist der Hype bzw. das Gerede um sqlite auf Hacker News nicht etwas übertrieben? Seit 2022 wurden auf Hacker News viele Beiträge veröffentlicht, die behaupten, sqlite könne ein separat betriebenes RDBMS ersetzen.
1: https://news.ycombinator.com/item?id=31318708
2. https://news.ycombinator.com/item?id=31152490
3. https://news.ycombinator.com/item?id=34812527
4. https://news.ycombinator.com/item?id=36208568
Außerdem: https://hn.algolia.com/?dateEnd=1720854657&dateRange=custom&da…
Wenn sich der Einsatz von Datenbankprodukten wie Postgres oder MySQL wie Overkill anfühlt, kann SQLite meiner Meinung nach eine durchaus attraktive Alternative sein.
Zum Beispiel können bei kleinen Services die Kosten für eine Managed DB unverhältnismäßig hoch sein, und sie selbst zu betreiben ist wiederum ebenfalls belastend.
SQLite hingegen soll bis zu einer gewissen Größenordnung leistungsmäßig keine Schwächen zeigen, und besonders mit Tools wie Litestream scheint auch der Betriebsaufwand fast wegzufallen, was es vorteilhaft macht.
Ohne überhaupt bis zu Replikationsfunktionen gehen zu müssen, ist
sqlitewirklich gut, weil selbst Backups unkompliziert sind und man nur den Zustand des Service-Daemons verwalten muss. Aber wenn man es an JPA anbinden will, muss man dieses und jenes zusätzlich machen, sodass ich es in Projekten, die man an andere übergeben muss, am Ende doch nicht verwenden kann. Wenn man wie im Originalbeitrag den Willen hat, das Datenschema etwas strenger zu handhaben, passt es für so einen Zweck auch nicht.Ich hatte meinen vorherigen Kommentar nicht zu Ende geschrieben, aber ich wollte sagen, dass die Gerüchte rund um
sqlitedie Illusion erzeugen, als wäresqliteein Alleskönner.