Das realistische Limit (der Größe einiger SQLite-Datenbanken) entspricht dem realistischen Limit für eine Datendatei. Und diese Grenze hängt stark von Ihrem Computer und Ihrem System ab. Auf meinem aktuellen Linux-Desktop kann ich mir nicht viel mehr als eine 350-GB-Datei leisten (da ich als Faustregel vermeide, dass eine einzelne Datei mehr als eine halbe Festplattenpartition belegt). Übrigens wirkt sich diese praktische Beschränkung auch auf andere SQL-RDBMS wie PostGreSQL oder MariaDB aus (die meisten dieser Datenbanken speichern jedoch Daten in mehreren Dateien, die möglicherweise auf verschiedenen Dateisystemen gespeichert sind, und einige von ihnen können verteilte Daten auf Remotecomputern verwalten.). .)
Nach dem Lesen dieses Artikels bin ich immer noch nicht davon überzeugt, SQLite für irgendetwas in Betracht zu ziehen, das Hunderte von Gigabyte erfordern könnte
Sie haben Recht und Unrecht.
Sie haben Recht, denn auf heutigen Computern (Laptops und Desktops, keine Supercomputer oder Rechenzentrums-Server) sind immer noch hundert Gigabyte ein recht großer Speicherplatz. Wenn Sie also an eine so große Datenbank denken, sollten Sie sich in der Praxis einen echten SQL-Server (à la PostGreSQL) vorstellen, da Sie sehr wahrscheinlich Remotezugriff, effektiv gleichzeitigen Zugriff und wahrscheinlich verteilte Daten und Tabellen wünschen.
Sie haben (im Prinzip, ich habe es nie versucht) Unrecht, weil SQLite sehr wahrscheinlich in der Lage (und manchmal auch getestet) ist, mit einer Datenbank von mehreren hundert Gigabyte umzugehen, vorausgesetzt, Sie haben ein Dateisystem, das mit einer so großen Datei (und wahrscheinlich zwei von zwei) umgehen kann sie zumindest).
Ich würde sicherlich (manchmal) SQLite für Datenbanken von mehreren Dutzend Gigabyte in Betracht ziehen (und ich habe einmal eine so große .sqlite
Datei, IIRC von 40 GByte, ausprobiert). Auf aktuellen (Nicht-Supercomputer-) Computern würde ich zögern, viele hundert Gigabyte SQLite-Datenbank zu haben, einfach weil eine solche Datei nach heutiger Praxis ziemlich groß ist.
IIRC Einige Hardwarehersteller, die spezialisierte Dateisystemmaschinen verkauften, sprachen mich einmal von einer Terabyte-SQLite-Anwendung an (aber ich könnte mich irren).
Natürlich hängt die SQLite-Leistung (wie alle SQL-Datenbanken) stark von der Anzahl und Breite der Tabellen, ihren Indizes und den damit verbundenen SQL-Abfragen ab. Und Sie möchten keinen gleichzeitigen Zugriff (durch viele verschiedene Prozesse) haben, und Sie sollten die Transaktion (aus Erfahrung, auch bei einer winzigen SQLITE-Datenbank von wenigen Megabyte) verwenden, um Ihre z. B. tausend Einfügeanforderungen wirklich mit BEGIN TRANSACTION
& zu verpacken. END TRANSACTION
Wenn Sie dies nicht tun, verlangsamt sich Sqlite um einen großen Faktor (mehr als das 10-fache).
Und nach persönlicher Erfahrung kann SQLite bei geeigneter Konfiguration und Organisation eine Datenbank verwalten, die größer als der verfügbare Arbeitsspeicher ist (30 GB sind also kein Problem) - aber Sie möchten wahrscheinlich, dass die Indizes in den Arbeitsspeicher passen!
Wenn Sie etwas für einen "Supercomputer" oder eine teure Workstation codieren (z. B. mit 512 GB RAM und 8 TB Festplatte und 512 GB SSD), können Sie sicher eine Terabyte-SQLite-Datenbank haben. Aber Sie werden das vielleicht nur tun wollen, wenn ein (oder sehr wenige) Prozesse auf diese Datenbank zugreifen. Wenn Sie über ein Dutzend Prozesse verfügen, die gleichzeitig auf dieselbe Datenbank zugreifen, sollten Sie ein echtes SQL-RDBMS (à la MariaDB oder PostGreSQL) installieren.
Beachten Sie auch, dass das (Binär-) Format von .sqlite
Datenbankdateien zwar als "portabel" dokumentiert ist, ich es jedoch sehr bevorzuge, Datenbanken im SQL- Textformat (unter Verwendung von sqlite3 mydb.sqlite .dump > mydb.sql
) zu sichern . Dann brauche ich auch zusätzlichen Speicherplatz für diesen Text-Dump (und das senkt die realistische Grenze).
Normalerweise ist SQLite nicht der Engpass. Aber die Scheibe könnte sein.
PS. Dieselbe Überlegung könnte mit GDBM auf große indizierte Dateien angewendet werden .
PPS. In meinem expjs Zweig (sept.2016) meinem MELT - Monitor (GPLv3 freier Software, auf Github) Ich persistierenden das gesamte Application - Heap in JSON in einer frischen SQLite - Datenbank. Ich habe winzige Experimente mit mehreren Millionen Objekten (ziemlich "groß") ohne böse Überraschungen durchgeführt. YMMV.