Frage

Ich habe kürzlich diese Frage gelesen SQLite vs. MySQL und die Antwort wies darauf hin, dass SQLite nicht gut skaliert werden kann, und die offizielle Website bestätigt das irgendwie, Jedoch.

Wie skalierbar ist SQLite und wo liegen die höchsten Grenzen?

War es hilfreich?

Lösung

Gestern veröffentlichte ich eine kleine Website * Ihre rep zu verfolgen, die eine gemeinsame SQLite-Datenbank für alle Besucher verwendet. Leider auch mit der bescheidenen Last, die es auf meinem Gastgeber setzen lief es ganz langsam. Dies liegt daran, die gesamte Datenbank jedes Mal, wenn jemand betrachten die Seite gesperrt wurde, weil es Updates enthalten / Einsätze. Ich wechselte bald zu MySQL und während ich nicht viel Zeit, um es zu testen hatte aus, es scheint viel besser skalierbar als SQLite. Ich erinnere mich nur langsam Seite geladen wird und gelegentlich eine Datenbank gesperrt Fehler, wenn ich versuche Anfragen von der Shell in SQLite auszuführen. Das heißt, ich bin eine andere Website von SQLite läuft gut. Der Unterschied besteht darin, dass die Website statisch ist (das heißt ich bin der einzige, der die Datenbank ändern kann) und so funktioniert es ganz gut für die gleichzeitige liest. Moral der Geschichte:. Verwenden Sie nur SQLite für Websites, auf denen Updates der Datenbank selten vorkommen (seltener als jeder Seite geladen)

Bearbeiten : Ich habe erkannt, dass ich nicht auf SQLite Messe gewesen sein mag - ich alle Spalten in der SQLite-Datenbank nicht Index, als ich es von einer Webseite bediente. Diese teilweise die Verlangsamung verursacht ich erleben. Allerdings steht die Beobachtung der Datenbank sichernd -., Wenn Sie besonders belastende Updates haben, SQLite Leistung nicht MySQL oder Postgres übereinstimmen

ein weiteres bearbeiten: Da ich dieses geschrieben fast 3 Monate zuvor habe ich die Möglichkeit hatte, genau die Skalierbarkeit von SQLite zu untersuchen, und mit ein paar Tricks kann es ziemlich skalierbar sein. Wie ich in meinem ersten bearbeiten erwähnt, Datenbankindizes Abfragezeit drastisch reduzieren, aber dies eher eine allgemeine Beobachtung ist, über Datenbanken, als es über SQLite ist. Allerdings gibt es einen weiteren Trick, den Sie SQLite zu beschleunigen benutzen: Transaktionen . Jedes Mal, wenn Sie mehrere Datenbank schreibt zu tun haben, setzen Sie sie in einer Transaktion. Statt zu schreiben (und Sperren), um die Datei jedes Mal eine Schreibabfrage ausgegeben wird, wird der Schreib nur einmal geschehen, wenn die Transaktion abgeschlossen ist.

Die Website, die ich erwähne, dass ich im ersten Absatz freigegeben wurde wieder auf SQLite umgeschaltet, und es läuft ganz glatt, wenn ich meinen Code in ein paar Stellen abgestimmt.

* die Seite ist nicht mehr verfügbar

Andere Tipps

SQLite in Bezug auf den Single-User skalierbar ist, ich habe mehrere Gigabyte große Datenbank, die sehr gut funktioniert und ich habe nicht viele Probleme mit ihm habe.

Aber es ist Single-User, so dass es hängt davon ab, welche Art von Skalierung Sie sprechen.

Als Reaktion auf die Kommentare. Beachten Sie, dass es gibt nichts, in einer Mehrbenutzerumgebung mit einer SQLite-Datenbank verhindert, aber jede Transaktion (in der Tat, jede SQL-Anweisung, die die Datenbank modifiziert) hat eine Sperre auf der Datei , die verhindert, anderen Benutzern den Zugriff auf die Datenbank an alle .

Wenn Sie also viele Änderungen an der Datenbank vorgenommen haben, Sie gehen im Wesentlichen sehr schnell Skalierungsprobleme zu treffen. Wenn auf der anderen Seite, können Sie eine Menge Lesezugriff haben im Vergleich Zugang zu schreiben, ist es vielleicht nicht so schlimm sein.

Aber SQLite wird natürlich Funktion in einer Multi-User-Umgebung, aber es wird nicht durchführt gut.

SQLite treibt die sqlite.org Website und andere, die viel Verkehr haben. Sie schlagen vor, dass, wenn Sie weniger als 100k Zugriffe pro Tag, sollte SQLite gut funktionieren. Und das wurde geschrieben, bevor sie die „writeahead Logging“ Funktion ausgeliefert.

Wenn Sie die Dinge beschleunigen, mit SQLite möchten, gehen Sie wie folgt vor:

  • Upgrade auf SQLite 3.7.x
  • Aktivieren Wal-Prinzip
  • Führen Sie den folgenden Pragma: "PRAGMA cache_size = Anzahl-of-Seiten;" Die Standardgröße (Anzahl-of-Seiten) ist 2000 Seiten, aber wenn Sie diese Zahl erhöhen, dann werden Sie die Datenmenge zu erhöhen, die gerade aus Speicher ausgeführt wird.

Sie können einen Blick auf mein Video auf YouTube nehmen wollen als „ SQLite Leistung Verbessern Sie mit writeahead Logging “ das zeigt, wie Wal-Prinzip bedienen und zeigt eine 5-fach Geschwindigkeitsverbesserung für schreibt.

SQLite ist eine Desktop oder In-Prozess Datenbank. SQL Server, MySQL, Oracle, und ihre Brüder sind Server .

Desktop-Datenbanken sind von Natur aus nicht eine gute Wahl für jeder Anwendung, die gleichzeitige Schreibzugriff auf den Datenspeicher unterstützen muss. Dazu gehören auf einer bestimmten Ebene die meisten Websites aller Zeiten. Wenn Sie auch nur für etwas anmelden müssen, müssen Sie wahrscheinlich Zugriff auf die DB schreiben.

Haben Sie diese SQLite Dokumente lesen - http://www.sqlite.org/whentouse.html?

  

SQLite in der Regel funktioniert groß wie die   Datenbank-Engine für niedrige bis mittlere   Traffic-Websites (das heißt,   99,9% aller Websites). Die Menge an Web-Traffic, dass SQLite umgehen kann   hängt natürlich davon ab, wie stark die   Website benutzt seine Datenbank. Allgemein   gesprochen, jede Website, die weniger bekommt   als 100K Hits sollte / Tag funktionieren   mit SQLite. Die 100K Hits / Tag Figur   ist eine konservative Schätzung, nicht eine harte   obere Grenze. SQLite wurde   gezeigt mit 10-mal arbeiten   die Menge des Verkehrs.

SQLite Skalierbarkeit wird stark abhängig von den verwendeten Daten und deren Format. Ich habe einige harte Erfahrung mit extra langen Tischen (GPS Datensätze, einen Datensatz pro Sekunde) hatte. Die Erfahrung hat gezeigt, dass SQLite in Stufen verlangsamen würde, zum Teil aufgrund der ständigen Neugewichtung der wachsenden Binärbäumen die Indizes halten (und mit einem Zeitstempel versehen Indizes Sie nur wissen, dieser Baum eine Menge erhalten neu gewichtet wird , doch ist es zu Ihrer Suche vital). Also am Ende bei etwa 1 GB (sehr groben, ich weiß), werden Anfragen in meinem Fall nur schleppend voran. Ihre Laufleistung variieren.

Eine Sache zu erinnern, trotz all der Prahlerei, SQLite ist nicht für Data Warehousing gemacht. Es gibt verschiedene Verwendungen nicht für SQLite empfohlen . Die fein Leute hinter SQLite sagen, dass es mich:

  

Eine weitere Möglichkeit, auf SQLite zu suchen, ist dies: SQLite ist nicht darauf ausgelegt Oracle zu ersetzen. Es wurde entwickelt, fopen zu ersetzen ().

Und dies führt zu dem Hauptargument (nicht quantitativ, sorry, aber qualitativ), SQLite ist nicht für alle Anwendungen, während MySQL viele verschiedene Anwendungen abdecken kann, wenn auch nicht ideal. Zum Beispiel könnten Sie MySQL Speicher Firefox Cookies (anstelle von SQLite) haben, aber Sie würden diesen Service benötigen die ganze Zeit laufen. Auf der anderen Seite könnten Sie eine transaktionale Website läuft auf SQLite haben (wie viele Menschen tun) anstelle von MySQL, aber viele Ausfallzeiten erwarten.

ich denke, dass ein (in Zahlen 1) Web-Server hunderte von Kunden erscheint auf dem Back-End mit einer einzigen Verbindung zur Datenbank dient, nicht wahr?

Es gibt also keine gleichzeitigen Zugriff auf die Datenbank ist ein daher können wir sagen, dass die Datenbank in ‚Single-User-Modus‘ arbeitet. Es macht keinen Sinn, Multi-User-Zugriff in einem solchen Fall Diskuss und so SQLite funktioniert auch wie jede andere serverbasierte Datenbank.

Denken Sie an es auf diese Weise. SQL Lite wird jedes Mal, wenn jemand es verwendet gesperrt werden (SQLite verriegelt nicht auf das Lesen). Also, wenn Ihr eine Webseite oder eine Anwendung serviert, die mehrere gleichzeitige Benutzer hat nur könnte man die App zu einem Zeitpunkt mit SQLLite verwenden. So richtig es ist eine Skalierung Problem. Wenn ihr ein eine Person Anwendung eine Musikbibliothek sagen, wo Sie Hunderte von Titeln, Ratings halten, Informationen, Nutzung, spielen, spielen Zeit, dann wird SQL Lite skaliert schön Tausende, wenn nicht Millionen von Datensätzen (Festplatte bereit)

Halten

MySQL auf der anderen Seite funktioniert gut für Server-Anwendungen, wo die Menschen überall werden sie gleichzeitig verwenden. Es ist nicht zu sperren, und es ist recht groß. Also für Ihre Musikbibliothek würde MySql über werden töten, da nur eine Person, die sie sehen würde, es sei denn, eine gemeinsame Musikbibliothek ist, wo Tausende hinzuzufügen oder zu aktualisieren. Dann würde MYSQL derjenige sein, zu verwenden.

Also in der Theorie MySQL besser skaliert dann SQLLite weil es mutiple Benutzer verarbeiten kann, ist aber viel des Guten für einen einzelnen Benutzer App.

SQLite-Website (der Teil, den Sie verweisen) zeigt an, dass es für eine Vielzahl von Multi-User-Situationen verwendet werden kann.

Ich würde sagen, dass es ziemlich viel verarbeiten kann. Nach meiner Erfahrung ist es immer sehr schnell. Natürlich müssen Sie Ihre Tabellen zu indizieren und wenn dagegen Codierung, müssen Sie Sie parameritized Abfragen und dergleichen stellen Sie sicher, verwenden. Im Grunde das gleiche Material, das Sie mit jeder Datenbank tun würden, die Leistung zu verbessern.

Es könnte sein, lohnt sich REAL SQL Server , die ein Datenbankserver auf SQLite gebaut ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top