Gestern habe ich eine kleine Seite veröffentlicht *um Ihren Mitarbeiter zu verfolgen, der eine gemeinsam genutzte SQLite-Datenbank für alle Besucher verwendet hat. Leider lief es trotz der bescheidenen Belastung meines Hosts ziemlich langsam. Dies liegt daran, dass die gesamte Datenbank jedes Mal gesperrt wurde, wenn jemand die Seite betrachtete, da sie Aktualisierungen / Einfügungen enthielt. Ich wechselte bald zu MySQL und obwohl ich nicht viel Zeit hatte, es zu testen, scheint es viel skalierbarer zu sein als SQLite. Ich erinnere mich nur an langsame Seitenladevorgänge und gelegentliche Fehler beim Sperren der Datenbank, wenn versucht wurde, Abfragen von der Shell in SQLite auszuführen. Das heißt, ich führe eine andere Site von SQLite aus. Der Unterschied besteht darin, dass die Site statisch ist (dh ich bin die einzige, die die Datenbank ändern kann) und daher für gleichzeitige Lesevorgänge einwandfrei funktioniert. Moral der Geschichte:
Bearbeiten : Ich habe gerade festgestellt, dass ich SQLite gegenüber möglicherweise nicht fair war. Ich habe keine Spalten in der SQLite-Datenbank indiziert, als ich sie von einer Webseite aus bereitgestellt habe. Dies verursachte teilweise die Verlangsamung, die ich erlebte. Die Beobachtung von Datenbanksperrungen steht jedoch - wenn Sie besonders belastende Updates haben, stimmt die SQLite-Leistung nicht mit MySQL oder Postgres überein.
eine weitere Änderung: Seit ich dies vor fast 3 Monaten gepostet habe, hatte ich die Gelegenheit, die Skalierbarkeit von SQLite genau zu untersuchen, und mit ein paar Tricks kann es ziemlich skalierbar sein. Wie ich in meiner ersten Bearbeitung erwähnt habe, verkürzen Datenbankindizes die Abfragezeit erheblich. Dies ist jedoch eher eine allgemeine Beobachtung zu Datenbanken als zu SQLite. Es gibt jedoch noch einen anderen Trick, mit dem Sie SQLite beschleunigen können: Transaktionen . Wenn Sie mehrere Datenbankschreibvorgänge ausführen müssen, fügen Sie diese in eine Transaktion ein. Anstatt jedes Mal, wenn eine Schreibabfrage ausgegeben wird, in die Datei zu schreiben (und sie zu sperren), wird der Schreibvorgang nur einmal ausgeführt, wenn die Transaktion abgeschlossen ist.
Die Site, die ich im ersten Absatz erwähnt habe, wurde wieder auf SQLite umgestellt und läuft recht reibungslos, sobald ich meinen Code an einigen Stellen optimiert habe.
* Die Seite ist nicht mehr verfügbar