Websites für den internen Gebrauch: Gibt es einen überzeugenden Fall gegen SQLite?

23

Viele Webframeworks wie Flask oder Django verwenden SQLite als Standarddatenbank. SQLite ist überzeugend, weil es in Python enthalten ist und der administrative Aufwand ziemlich gering ist.

Die meisten öffentlichen Produktionsstätten mit hohem Datenaufkommen verwenden jedoch eine umfangreichere Datenbank: mySQL, Oracle oder postgresql.

Die Fragen :

Annehmen:

  • Der Datenverkehr auf der Website ist mäßig und es wird gleichzeitig Lese- / Schreibzugriff auf die Datenbank gewährt
  • Wir werden SQLAlchemy mit SQLite-Schreibsperren verwenden (obwohl dieser Kommentar mich etwas nervös macht)
  • Die Datenbank wird möglicherweise 60.000 Datensätze enthalten
  • Datenstrukturen erfordern keine erweiterten Funktionen in schwereren Datenbanken

Gibt es jemals ein überzeugendes Argument gegen die SQLite- Parallelität für Websites, die als interne Tools für Unternehmen mit mäßigem Datenverkehr dienen? Wenn ja, unter welchen Bedingungen treten bei SQLite Parallelitätsprobleme auf?

Ich suche nach bekannten spezifischen Ursachen, anstatt nach allgemeiner Angst / unbegründetem Fingerzeigen.

Mike Pennington
quelle
Wie ist sqllite mit Funktionen wie Replikation usw., die für Backups usw. nützlich sein könnten? In SQLlite habe ich den Eindruck, dass die App die Datenbank besitzt. Können Sie Admin-Skripte usw. ausführen, während Ihre App ausgeführt wird?
Doug T.
1
Einige Anekdoten zu SQLite und Parallelität (meist positiv): sqlite3 Concurrent Access
Daniel B
1
Was ist bei einer internen Website der zwingende Grund für SQLite? Einschränkungen bei der Installation eines RDBMS?
JeffO
Abgesehen von der Vereinfachung der Entwicklungsumgebung auf den Laptops der einzelnen Entwickler gibt es keinen Grund. Die Frage ist natürlich, ob wir die Entwicklungs- und Produktionsumgebung einigermaßen vereinfachen können
Mike Pennington

Antworten:

23

Ich empfehle, die offizielle Antwort auf Ihre Frage " Geeignete Verwendungen für SQLite" zu lesen . Insbesondere warnt "Situationen, in denen ein anderes RDBMS möglicherweise besser funktioniert", dass SQLite das gleichzeitige Schreiben nicht unterstützt:

SQLite unterstützt eine unbegrenzte Anzahl gleichzeitiger Leser, lässt jedoch zu jedem Zeitpunkt nur einen Schreiber zu. In vielen Situationen ist dies kein Problem. Jede Anwendung erledigt ihre Datenbankarbeiten schnell und fährt fort, und keine Sperre dauert länger als ein paar Dutzend Millisekunden. Es gibt jedoch einige Anwendungen, die mehr Parallelität erfordern, und diese Anwendungen müssen möglicherweise nach einer anderen Lösung suchen.

Aus der Perspektive der Angemessenheit neige ich dazu, SQLite als ein sehr ausgefeiltes Dateiformat anzusehen, das SQL-Abfragen unterstützt. Ich würde SQLite eher vermeiden, wenn ich meine Datenbank von meiner Webanwendung trennen möchte, da sie nicht für diesen Fall optimiert ist. Kurz gesagt, SQLite ist für die Verwendung in einigen Szenarien nicht ausreichend skalierbar. Daher ist es für Benutzer von Websites, die hoffen, dass sie irgendwann populär werden, möglicherweise besser, mit etwas Skalierbarem zu beginnen, als mit SQLite zu arbeiten und später zu wechseln.

Trotzdem ist SQLite für die meisten internen Websites in Ordnung. In der Regel erfordern interne Websites nicht dasselbe Maß an Parallelität und Skalierbarkeit.

Brian
quelle
Auch die meisten externen Websites. Die Datenbank-Engine kann ausgetauscht werden, wenn so etwas wie EF verwendet wird, obwohl PostGres wahrscheinlich von Anfang an die bessere Wahl wäre.
Robert Harvey
@RobertHarvey was ist EF?
Mike Pennington
@ MikePennington: Entity Framework. Ich stelle mir vor, es gibt andere ORMs, die ebenfalls Datenbanktransparenz haben oder zumindest die Treiber austauschen können.
Robert Harvey
1
Das pythonische Äquivalent wäre etwa SQL Alchemy
Wyatt Barnett
"Ich neige dazu, SQLite als ein sehr ausgeklügeltes Dateiformat anzusehen, das SQL-Abfragen unterstützt." Perfekte Definition.
Wildcard
4

Wenn ich meinen IT-Direktor aufsetze, sehe ich hier ein paar No-Gos:

  • Gefahr der Datenkorruption. Vielleicht mehr als real, aber am Ende des Tages ist dies ein nicht-transaktionaler Dateityp-DB, der nicht viel zu tun hat, außer zu fragen, ob Sie ein aktuelles Backup haben. Apropos. . .
  • Wie kann ich dieses Ding sichern? In gewisser Weise weiß ich, dass ich ein gutes Exemplar habe. Am besten ohne die App offline zu nehmen.
  • Wie kann ich den Zugriff auf die DB sichern? Mein allgemeines Verständnis ist, dass SQL Lite keinen Zugriff außerhalb des Dateisystems hat. Dies ist ein guter Anfang, aber nicht das A und O. Besonders für Web-Apps, bei denen Sie möglicherweise mehr abgestufte Berechtigungen als DBA oder nichts möchten.

Aus Entwicklersicht ist es meiner Meinung nach wichtig zu wissen, warum SqlLite die Standardeinstellung ist - weil es einfach ist und sich gut als Demo eignet. Wenn Sie eine Plattform an neue Entwickler "verkaufen", ist es entscheidend, dass Sie eine funktionierende Web-App mit minimalem Aufwand starten können. Das Aufstehen und die ordnungsgemäße Konfiguration eines Datenbankservers wäre ein massiver Stolperstein, der vermieden werden muss.

Wyatt Barnett
quelle
1
Nun, Sicherungen können über die SQLite Backup-API durchgeführt werden . Ich stelle fest, dass SQLite standardmäßig möglicherweise nicht ganz so sicher ist, da SQLite-Clients im Gegensatz zu serviceorientierten Systemen direkter mit der Datenbankdatei kommunizieren. Allerdings verwendet SQLite ein Journal zum Schutz vor Systemfehlern und sollte zuverlässig sein, wenn das Host-Betriebssystem die von SQLite verwendeten Sperrprimitive ordnungsgemäß unterstützt (Netzwerkfestplatten-E / A nicht). Die offizielle Site listet verschiedene Szenarien auf, die zu einer beschädigten SQLite-Datenbank führen.
Brian
SQLite ist eine Transaktion . Verwenden Sie die Sicherungs-API oder passen Sie das Sicherungsskript von MediaWiki an, um Online-Sicherungen durchzuführen. Ihr allgemeines Verständnis des SQLite-Sicherheitsmodells ist korrekt. Das offizielle Sicherheitshinweis lautet „Verwenden Sie den gesunden Menschenverstand“: Überlegen Sie, wie Benutzer auf Ihre Datenbankdatei zugreifen und Ihre Webanwendung entsprechend gestalten können.
Iain Samuel McLean Elder
@Brian - Es fällt mir schwer, an eine andere Datenbank mit einer ganzen Seite zu denken, die der Frage gewidmet ist, wie diese Datenbank beschädigt werden kann. Ich werde hinzufügen, dass ich das SQL Lite-Projekt erstaunlich finde - sie haben wahrscheinlich diese Seite, weil sie verrückt sind und auch so etwas wie 10 Zeilen Testcode für jede Zeile Produktionscode haben und wirklich sicher und gründlich sein möchten.
Wyatt Barnett