10 Punkte von xguru 2024-07-13 | 6 Kommentare | Auf WhatsApp teilen
  • 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

 
tested 2024-07-16

Es wirkt, als wolle man nicht SQLite, sondern eher SQLHeavy.

 
princox 2024-07-15

Es gibt diese Datenbank und jene Datenbank. Ich hatte den Eindruck, dass SQLite auf seine eigene Weise nach einer bestimmten Philosophie betrieben wird.

 
regentag 2024-07-13

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!“

 
savvykang 2024-07-13

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…

 
eajrezz 2024-07-13

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.

 
savvykang 2024-07-14

Ohne überhaupt bis zu Replikationsfunktionen gehen zu müssen, ist sqlite wirklich 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 sqlite die Illusion erzeugen, als wäre sqlite ein Alleskönner.