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
Sqlite ist in Bezug auf Einzelbenutzer skalierbar. Ich habe eine Multi-Gigabyte-Datenbank, die sehr gut funktioniert, und ich hatte keine großen Probleme damit.
Da es sich jedoch um Einzelbenutzer handelt, hängt es davon ab, um welche Art von Skalierung es sich handelt.
Als Antwort auf Kommentare. Beachten Sie, dass es nichts , dass verhindert in einer Mehrbenutzerumgebung eine SQLite - Datenbank verwenden, aber jede Transaktion (in der Tat, jede SQL - Anweisung , dass ändert sich die Datenbank) auf dem eine Sperre nimmt Datei , die anderen Benutzern den Zugriff auf die Datenbank verhindern wird bei alle .
Wenn Sie also viele Änderungen an der Datenbank vorgenommen haben, werden Sie im Wesentlichen sehr schnell auf Skalierungsprobleme stoßen. Wenn Sie andererseits im Vergleich zum Schreibzugriff viel Lesezugriff haben, ist dies möglicherweise nicht so schlecht.
Aber SQLite wird natürlich Funktion in einer Multi-User - Umgebung, aber es wird nicht durchführen gut.
quelle
SQLite steuert die Website sqlite.org und andere Websites mit viel Datenverkehr. Sie schlagen vor, dass SQLite einwandfrei funktionieren sollte , wenn Sie weniger als 100.000 Treffer pro Tag haben. Und das wurde geschrieben, bevor sie die Funktion "Writeahead Logging" lieferten.
Wenn Sie die Arbeit mit SQLite beschleunigen möchten, gehen Sie wie folgt vor:
Vielleicht möchten Sie sich mein Video auf YouTube mit dem Titel " Verbessern der SQLite-Leistung mit Writeahead-Protokollierung " ansehen, das die Verwendung der Write-Ahead-Protokollierung zeigt und eine 5- fache Geschwindigkeitsverbesserung für Schreibvorgänge demonstriert.
quelle
Sqlite ist eine Desktop- oder In-Process- Datenbank. SQL Server, MySQL, Oracle und ihre Brüder sind Server .
Desktop - Datenbanken sind von Natur aus nicht eine gute Wahl für jede Anwendung , die Bedürfnisse gleichzeitiger Schreibzugriff auf den Datenspeicher zu unterstützen. Dies schließt auf einer bestimmten Ebene die meisten Websites ein, die jemals erstellt wurden. Wenn Sie sich überhaupt anmelden müssen, benötigen Sie wahrscheinlich Schreibzugriff auf die Datenbank.
quelle
Haben Sie diese SQLite-Dokumente gelesen - http://www.sqlite.org/whentouse.html ?
quelle
Die Skalierbarkeit von SQLite hängt stark von den verwendeten Daten und deren Format ab. Ich habe einige schwierige Erfahrungen mit extra langen Tischen gemacht (GPS-Aufzeichnungen, eine Aufzeichnung pro Sekunde). Die Erfahrung hat gezeigt, dass SQLite schrittweise langsamer wird, was teilweise auf das ständige Ausbalancieren der wachsenden Binärbäume mit den Indizes zurückzuführen ist (und bei Indizes mit Zeitstempel wissen Sie nur , dass der Baum stark neu ausbalanciert wird, aber dies ist für Sie von entscheidender Bedeutung sucht). Am Ende werden die Abfragen in meinem Fall bei etwa 1 GB (sehr viel, wie ich weiß) träge. Ihr Kilometerstand wird variieren.
Trotz aller Prahlerei ist SQLite NICHT für Data Warehousing gedacht. Es gibt verschiedene Verwendungen , die für SQLite nicht empfohlen werden . Die feinen Leute hinter SQLite sagen es selbst:
Und dies führt zu dem Hauptargument (nicht quantitativ, sorry, aber qualitativ), dass SQLite nicht für alle Verwendungszwecke geeignet ist, während MySQL viele verschiedene Verwendungszwecke abdecken kann, auch wenn dies nicht ideal ist. Sie könnten beispielsweise MyfQL Firefox-Cookies (anstelle von SQLite) speichern lassen, aber dieser Dienst muss ständig ausgeführt werden. Auf der anderen Seite könnten Sie eine Transaktionswebsite auf SQLite (wie viele andere auch) anstelle von MySQL ausführen, aber mit viel Ausfallzeit rechnen.
quelle
ATTACH DATABASE
eine virtuelle Datenbankverbindung mit allen Tabellen herstellen (jedoch nur auf 62 Datenbanken beschränkt).Ich denke, dass ein (in Nummer 1) Webserver, der Hunderte von Clients bedient, im Backend mit einer einzigen Verbindung zur Datenbank angezeigt wird, nicht wahr?
Es gibt also keinen gleichzeitigen Zugriff in der Datenbank und daher können wir sagen, dass die Datenbank im Einzelbenutzermodus arbeitet. Unter solchen Umständen ist es nicht sinnvoll, den Mehrbenutzerzugriff zu diskutieren. Daher funktioniert SQLite genauso wie jede andere serverbasierte Datenbank.
quelle
Denk darüber so. SQL Lite wird jedes Mal gesperrt, wenn jemand es verwendet (SQLite wird beim Lesen nicht gesperrt). Wenn Sie also eine Webseite oder eine Anwendung mit mehreren gleichzeitigen Benutzern bereitstellen, kann nur einer Ihre App gleichzeitig mit SQLLite verwenden. Es gibt also ein Skalierungsproblem. Wenn es sich um eine Ein-Personen-Anwendung handelt, z. B. eine Musikbibliothek, in der Sie Hunderte von Titeln, Bewertungen, Informationen, Verwendung, Wiedergabe und Spielzeit speichern, skaliert SQL Lite wunderbar mit Tausenden, wenn nicht Millionen von Datensätzen (Festplatte bereit).
MySQL hingegen funktioniert gut für Server-Apps, bei denen Benutzer es gleichzeitig verwenden. Es sperrt nicht und ist ziemlich groß. Für Ihre Musikbibliothek wäre MySql also zu Ende, da nur eine Person es sehen würde, es sei denn, dies ist eine gemeinsam genutzte Musikbibliothek, in der Tausende sie hinzufügen oder aktualisieren. Dann wäre MYSQL die richtige Wahl.
Theoretisch skaliert MySQL also besser als Sqllite, da es mehrere Benutzer verarbeiten kann, aber für eine Einzelbenutzer-App übertrieben ist.
quelle
Die Website von SQLite (der Teil, auf den Sie verwiesen haben) gibt an, dass sie für eine Vielzahl von Mehrbenutzersituationen verwendet werden kann.
Ich würde sagen, dass es ziemlich viel kann. Nach meiner Erfahrung war es immer sehr schnell. Natürlich müssen Sie Ihre Tabellen indizieren und beim Codieren sicherstellen, dass Sie parameritisierte Abfragen und dergleichen verwenden. Grundsätzlich das gleiche, was Sie mit jeder Datenbank tun würden, um die Leistung zu verbessern.
quelle
Es könnte sich lohnen, REAL SQL Server zu testen , einen auf SQLite basierenden Datenbankserver.
quelle