Ist SQLite nicht ein bisschen unterschätzt? [geschlossen]

15

Bevor ich die Frage stelle, möchte ich zunächst meine Gedanken zu SQLite beschreiben.

Ich mag Tools, die klein, schnell und vor allem nur die wirklich notwendige Funktionalität haben. Deshalb mag ich SQLite und MS-SQL ein bisschen weniger.

Zum Beispiel: MS-SQL verfügt möglicherweise über viel mehr Funktionen, Skalierbarkeit usw. usw. Die Installation kann jedoch auch schwierig sein, wenn Sie Pech haben. Natürlich sage ich nicht, dass eine schwierige Installation ein Grund ist, sich nicht für eine bestimmte Datenbank zu entscheiden.

Verstehen Sie mich nicht falsch: MS-SQL ist ein Produkt von guter Qualität. Ich bin sehr erfahren mit MS-SQL; Ich verstehe das Produkt sehr gut als Profi. Ich bevorzuge es einfach weniger unter bestimmten Umständen, wo es ist nicht wirklich benötigt wird (= nicht viele Benutzer, <10-15).

Wie viel von der Funktionalität einer Datenbank nutzen Sie wirklich? Nach meiner Erfahrung ist es oft nur das normale SQL (SELECT, INSERT und UPDATE).

Ich mag SQLite. Ist schnell faszinierend. Es ist extrem einfach zu "installieren". Ich denke, SQLite kann mehr, als es behauptet. Warum sollte es nur für Einprozess- / Einzelbenutzeranwendungen verwendet werden? Immerhin: Nicht viele Anwendungen greifen ständig auf eine Datenbank zu.

Beispiel: Stellen Sie sich eine ERP-Anwendung mit beispielsweise 15 Benutzern vor. Warum kann SQLite dafür nicht verwendet werden? Seien wir ehrlich: Nach meiner beruflichen Erfahrung greifen Benutzer dieser Art von Anwendung in den meisten Fällen für etwa 5-10% der Gesamtzeit, in der sie die Anwendung verwenden, auf die Datenbank zu. In den anderen 90-95% beobachten sie nur die Informationen auf dem Bildschirm, geben Daten in ein Raster / Formular ein und wenn sie ihre Eingaben speichern, ist dies nicht mehr als 1 Sekunde der Datenbankzeit. Fe: 1,5 Minuten Eingabezeit gegenüber 1 Sekunde Zeitersparnis.

Wenn die SQLite-Datenbankdatei während der "Zeitersparnis" gesperrt ist, warten andere Benutzer, die auf die Datenbank zugreifen müssen, nur, aber sie bemerken dies nicht, da die Wartezeit sehr gering sein wird (unbemerkt). Im Code muss man sich nur mit der möglichen "ausgelasteten" Zeit der Datenbank auseinandersetzen, um Ausnahmen zu vermeiden, aber das ist nicht schwer zu tun.

Ein Typ, der genauso denken muss wie ich, hat sogar eine Client-Server-Lösung für SQLite entwickelt: SQLitening . Das hat mich mehr überzeugt, dass ich mich nicht selbst täuschen kann.

Natürlich gibt es datenbankintensive Anwendungen, bei denen SQLite nicht passt. Aber wenn ich jetzt darüber nachdenke, sollten viele Mehrbenutzeranwendungen mit SQLite gut funktionieren, wenn sie nicht mehr als 15 Benutzer haben.

Viele unserer Kunden geben nicht viel für Hardware aus, daher stoße ich häufig auf einen einzigen Server, auf dem sich alles befindet (Exchange, SQL (s), Clients usw.) und der fast "außer Atem" ist. Wenn ich ein Produkt liefern könnte, das keine hohen Systemanforderungen hat, wäre mein Kunde glücklich. SQLite fügt kein Gewicht hinzu (zumindest nicht viel), MS-SQL tut dies. Ich würde mich also nicht für SQLite entscheiden, da es kostenlos, günstig oder einfach zu installieren ist. Ich würde es aus praktischen / technischen Gründen wählen.

Zu meiner Information: In meinem Beruf verkaufen wir Produkte (kundenspezifisch und standardmässig, hauptsächlich ERP-bezogen) an Kunden, bei denen durchschnittlich nicht mehr als 5-6 Personen das Produkt verwenden. Es gibt einige Ausnahmen, aber nicht mehr als 10-15 Benutzer.

Die Frage ist: Habe ich Recht, wenn ich denke, dass ich SQLite für eine Mehrbenutzeranwendung wie das von mir beschriebene Beispiel verwenden kann? Gibt es technische Nachteile, die ich kennen sollte? Welche (negativen oder positiven) Erfahrungen werden mir helfen, die richtige Wahl zu treffen?

Update: Bitte sehen Sie dies nicht als negative Beurteilung anderer Datenbanken. Sie sind meist alle feine Produkte. Teile hier nur meine Gedanken mit und bin an deinen Meinungen dazu interessiert.


quelle
9
Tut mir leid, aber ich füge hinzu: "Habe ich recht?" verwandelt ein Geschwätz nicht in eine Frage.
pdr
1
@pdr: Warum hältst du das für einen Scherz? Ich bewerte MS-SQL oder andere Datenbanken nicht negativ. Es sind meistens alles feine Produkte. Ich teile nur meine Gedanken und bin daran interessiert, die Meinungen anderer Programmierkollegen zu hören. Nicht mehr, nicht weniger.
3
Es gibt dort keine Frage, nur eine Suche nach Validierung. Aus den häufig gestellten Fragen: "Sie sollten nur praktische, beantwortbare Fragen stellen, die auf tatsächlichen Problemen beruhen, denen Sie gegenüberstehen. Gesprochene, offene Fragen beeinträchtigen den Nutzen unserer Website und vertreiben andere Fragen von der Startseite." programmers.stackexchange.com/faq
pdr
1
@pdr: Ich verstehe das, aber ich wollte hier ehrlich eine Frage stellen. Vielleicht war ich nicht klar, also habe ich die Frage umformuliert.
4
Datenbankauswahl, Codeoptimierung, Client, Server oder webbasierte Anwendung - all dies sind Bereiche, in denen die Vor- und Nachteile auf einer solchen Plattform erörtert werden müssen. Für mich ist ein Rant mehr, wenn sich jemand kategorisch weigert, eine einlösende Eigenschaft in einer bestimmten Technologie zu finden.
JeffO

Antworten:

8

Es gibt viele Fälle, in denen SQLite reichlich vorhanden ist. Der Benutzer, die Abteilung oder das Unternehmen wachsen selten aus ihm heraus (wir hören nicht so viel davon, weil niemand einen Programmierer anruft, wenn die Anwendung einwandfrei funktioniert.) Sie könnten das gleiche Argument für eine MS Access-Datei (Windows) oder SQL Server Compact Edition (Installation erforderlich). Sie sind alle gut genug für eine lokale Anwendung, da Sie sich nicht so viele Gedanken über die Sicherheit der Datei machen müssen.

In einem Mehrbenutzer-Szenario in einem lokalen Netzwerk wird die Datei in einen freigegebenen Ordner verschoben, auf den alle Benutzer zugreifen müssen - Anrufsicherheit. Einfache Wartung oder Änderungen der Tabellenstruktur, wie z. B. Backups oder das Hinzufügen einer Spalte, verhindern den Zugriff anderer Benutzer. Letzte Nacht hat das Backup nicht funktioniert, weil jemand vergessen hat, die Anwendung zu beenden. Was passiert, wenn Sie mitten am Tag ein Backup erstellen möchten? Alle begründen, dass sie aufgrund der technischen Einschränkungen ihrer Datenbank tagsüber keine Backups benötigen. Zu einem bestimmten Zeitpunkt erfordert die Installation von SQL Server Express / einer anderen Entsprechung auf Ihrem Server einige anfängliche Setup- und Sicherheitskonfigurationen. Dies ist im Vorfeld aufwändiger, erfordert jedoch nur wenig Wartung.

Es besteht immer die Sorge um Skalierbarkeit / Überentwicklung. Selbst wenn die Anzahl der Benutzer oder die Datenmenge noch überschaubar ist, hat immer jemand die Idee, die Live-Daten in einem Intranet oder einer anderen Website / Browser-Oberfläche zu verwenden. Dateidatenbanken weisen Probleme auf. Es ist nur eine Person erforderlich, die über ein VPN auf die Datendatei zugreifen möchte (die App ist auf ihrem Laptop installiert), um das Problem der Skalierung zu lösen. Sie können die App so erstellen, dass nicht verbundene Benutzer bei ihrer Rückkehr eine Synchronisierung durchführen können. Scheint es für gelegentliche Abwesenheitsnutzer einfach nicht wert zu sein.

JeffO
quelle
Sie könnten dasselbe Argument für SQL Server Compact Edition, jedoch nicht für eine MS Access-Datenbank vorbringen. Access-Datenbanken werden wie echte Datenbanken behandelt, funktionieren jedoch eher wie gemeinsam genutzte Dateien. Sie sind eine zerbrechliche Lösung; SQL Server Compact ist eine bessere, schnellere und zuverlässigere Alternative, die immer noch mit Access-Frontends funktioniert. Ich vermute, dass SQLite wesentlich langlebiger ist als eine Access-Datenbank, obwohl es sich technisch um eine gemeinsam genutzte Dateilösung handelt.
Robert Harvey
@RobertHarvey - Wir haben geschäftliche Anforderungen, bei denen MS Access seit 10 Jahren eine ausreichend gute (dh bessere als Excel) Lösung ist. Wenn ein größeres Geschäft zustande kommt, müssen wir etwas in Gang bringen. Hauptbenutzer mit Access-Kenntnissen sind viel einfacher zu finden und zu nutzen. Die Funktionalität muss zu einem bestimmten Zeitpunkt verfügbar sein, aber wir sind froh, dass Skalierbarkeit, Leistung, Datenwachstum und Sicherheit noch nie ein Faktor waren. Upgrade von Access, jetzt ist das eine andere Geschichte.
JeffO
Versteh mich nicht falsch; Ich finde Access großartig. SQL Server Compact wäre jedoch meine Mindestanforderung an das Backend für alle neuen Access-Anwendungen, in denen Benutzer Daten gemeinsam nutzen.
Robert Harvey
@RobertHarvey - Das muss ich mir ansehen. Vielen Dank
JeffO
12

Ich denke, es ist großartig, wenn Sie eine "interne" Datenbank benötigen. Das heißt, eine Datenbank, mit der Ihre Anwendung / Ihr Code interagiert, die jedoch nicht direkt mit dem Hauptgrund für die Existenz Ihrer Anwendung zusammenhängt. Anstatt riesige In-Memory-Zuordnungen oder Cache-Manager zu verwenden, können Sie auch eine solche Datenbank verwenden. Ich habe ein sehr konkretes Beispiel dafür, da ich es kürzlich in JUnit / DBunit-Testfällen verwendet habe, in denen ich eine Verbindung zu einer Datenbank herstellen, einige Arbeiten ausführen, Daten lesen und am Ende alles löschen musste. Da Sie zum Erstellen der Datenbank nur eine leere Datei erstellen müssen, war dies recht einfach.

Eine andere Verwendung sehe ich: wenn Sie nur einen Benutzer haben. Ja, das ist möglich, denke zum Beispiel an "Firefox" oder "Opera" :-)

Außerdem sind sie auf der SQLite-Website sehr ehrlich und geben Gründe an, wann sie ES NICHT VERWENDEN sollten (siehe Abschnitt "Situationen, in denen ein anderes RDBMS möglicherweise besser funktioniert").

ps: Bezogen auf die Kommentare zu SQL Server Express, ja, es muss "installiert" werden. Und ich hatte einige Probleme damit, es persönlich zu aktualisieren (ich musste einige Registrierungsschlüssel der Vorgängerversion manuell entfernen, um 2008 R2 installieren zu können). Wenn Sie SQLite jedoch mit einer von Microsoft entwickelten Datenbank vergleichen möchten, schauen Sie sich die Sql Server Compact Edition an , die Sie nicht installieren müssen (siehe "Bereitstellung auf der Basis privater Dateien").

Jalayn
quelle
Ich habe mir CE angesehen, aber irgendwie scheint SQLite besser / schneller / einfacher zu sein. Ich weiß es nicht genau, ich habe CE nicht genug benutzt / getestet, um sicher zu gehen.
5

Beispiel: Stellen Sie sich eine ERP-Anwendung mit beispielsweise 15 Benutzern vor. Warum kann SQLite dafür nicht verwendet werden?

Sehr wenige Anwendungen haben so wenige Benutzer für immer. Und für alles, was mehr Benutzer und komplexere Datenmanipulationen sieht, kommt die Verwendung von SQLite aus Performancegründen aufgrund des einfachen Sperrmodells "Transaktion zu einem Zeitpunkt schreiben" überhaupt nicht in Frage.

Angenommen, Sie haben 100 Benutzer, die jeweils 60 Sekunden lang ein Formular ausfüllen und dann abschicken. Sie müssen also ungefähr 1,6 Transaktionen pro Sekunde verarbeiten. Das Datenmodell ist komplex und das Speichern eines Formulars umfasst das Lesen und Schreiben in viele große Tabellen, möglicherweise sogar die Kommunikation mit einem anderen System. Jedes "Formular senden" führt zu einer Transaktion, die 2 Sekunden dauert. SQLite kann jedoch keine Transaktionen gleichzeitig verarbeiten. Dies bedeutet, dass nur 0,5 Transaktionen pro Scond verarbeitet werden können. Hoppla.

"Die Installation kann mühsam sein" ist kein guter Grund, sich gegen ein kritisches Stück Infrastruktur zu entscheiden. Außerdem stehen andere DB-Engines zur Auswahl, von denen mindestens zwei (MySQL und Postgres) kostenlos sind und nicht die Parallelitätsbeschränkungen von SQLite aufweisen. Sie sind möglicherweise sogar einfacher zu installieren als MS-SQL.

Michael Borgwardt
quelle
Ich verstehe und stimme zu. Aber in meinem Beruf habe ich wirklich keine Kunden mit mehr als 10 Mitarbeitern, die unsere Produkte (Standard und kundenspezifisch, meistens ERP-bezogen) verwenden. Im Durchschnitt sind es sogar 5-6 Benutzer. Ich werde meine Frage umformulieren.
4
@Marcus V: Die Frage ist: Wenn ein Kunde stark gewachsen ist und feststellt, dass die von Ihnen erstellte App unglaublich langsam zu verwenden ist, sagen Sie ihm, dass das DBMS nicht mit so vielen Benutzern umgehen kann, und sie fragen: " Warum haben Sie kein besseres DBMS verwendet? Wie würden Sie die Antwort "Die sind schwer zu installieren" erhalten? Ich kann Ihnen sagen, wie ich reagieren würde: Ich würde denken, "das ist ein Amateur. Ich muss jemanden finden, der meine Software schreibt".
Michael Borgwardt
Du hast recht. Ich glaube nicht, dass Sie es so gemeint haben, aber ich kann Ihnen versichern, dass ich kein Amateur bin. Ich werde definitiv "echte" DBMS-Systeme verwenden, wenn die Situation danach verlangen würde. Unsere Produkte sind für eine Reihe von Benutzern lizenziert. Ich würde nur mit SQLite entwickeln, wenn ich weiß, dass die Anzahl der Benutzer relativ gering ist (<10-15). Sollte der Kunde ein Limit überschreiten, was in unserem Kundenstamm nicht in Kürze passieren wird, können wir diese immer relativ schnell / einfach in eine andere Datenbank konvertieren. Das ist keine Raketenwissenschaft;). Aufgrund Ihrer Bemerkungen habe ich die Frage umformuliert, um sie klarer zu machen.
Der Benutzer, der wegen des Auswachsens der Anwendung schimpft, wurde wahrscheinlich über die Benutzerbeschränkungen informiert, entschied sich jedoch für den billigeren Weg. Es ist alles in Ordnung für das anfängliche Setup, aber wie glücklich werden sie sein, wenn Sie ihnen eine weitere Gebühr für die Installation auf dem neuen Server in Rechnung stellen müssen, wenn sie nur eine Datei hätten kopieren können?
JeffO
1
@ Jeff O: Ich denke, Sie haben meine Absichten missverstanden. Ich entscheide mich nicht für SQLite, da es kostenlos, günstig und / oder einfach zu installieren ist. Ich würde es nur wählen, weil es klein, schnell und ressourcenschonend ist. Also hauptsächlich aus praktischen / technischen Gründen. Viele unserer Kunden geben nicht viel für Hardware aus, daher stoße ich oft auf einen einzigen Server, auf dem sich alles befindet (Exchange, SQL usw.) und der fast "außer Atem" ist. Wenn ich ein Produkt liefern könnte, das keine hohen Systemanforderungen hat, wäre mein Kunde glücklich. SQLite fügt kein Gewicht hinzu, MSSQL tut es.
4

Ich denke, SQLLite eignet sich hervorragend für die Anwendungsentwicklung. Die größte Stärke besteht darin, dass es nicht auf dem Client installiert werden muss.

Unterschätzen Sie jedoch auch SQL Server Express nicht, es handelt sich um eine kostenlose, hervorragende Datenbank mit den meisten Funktionen eines gewöhnlichen SQL-Servers, die nur eine Beschränkung der Datenbankgröße aufweist (die nur schwer zu überschreiten ist), zusammen mit der Fähigkeit, die hervorragenden normalen Tools zu verwenden SQL Server.

Der größte Nachteil ist, dass Sie es installieren müssen. Ich bin mir jedoch ein bisschen unsicher, ob es jetzt ein Ausweg ist

Homde
quelle
2
Du hast recht. MS-SQL Express ist ein Produkt von guter Qualität. Es ist nur so, dass ich es etwas aufgebläht finde und zu viele Ressourcen verbrauche. In heutigen PCs / Servern ist das kein Problem. Ich bin nur ein alter Mensch, der immer noch denkt, dass leistungsfähigere Hardware nicht bedeutet, dass ich Ressourcen vernachlässigen / verschwenden sollte, wenn ich es vermeiden kann. Weniger ist es besser ...;).
2
Die Datenbank mit DB-Engines kann den Zugriff optimieren, indem sie den Speicher zwischenspeichert, anstatt von Datenträgern zu lesen / schreiben. Aber ich bin mir nicht sicher über die Leistung für In-Process-DB wie SQL Lite
Sarat
1
@sarat: Afaik SQLite verwendet Memory Caches intensiv.
2

Ich halte SQLite nicht für eine seriöse Datenbank, wenn Sie stündlich mit ein paar GB Daten zu tun haben. Es wird schmerzhaft langsam und beeinträchtigt die Leistung der gesamten Anwendung. Sorry, aber ich stimme deiner Faszination für SQLite nicht zu :-)

Aussenseiter
quelle
1
Ich respektiere deine Meinung. Ich bin nur ein praktischer Mann. Wenn ich ein Werkzeug wähle, wähle ich es, weil ich denke, dass es die realistischste / praktischste Entscheidung ist. SQLite fasziniert mich nicht, aber ich bewundere die Art und Weise, wie sie es geschafft haben, so viel in ein so kleines, effizientes und schnelles Paket zu stecken. Wie ich in meiner Frage erwähnt habe: Wenn MS-SQL ein besseres Werkzeug für einen bestimmten Job ist, dann würde ich das einfach auswählen. Aber, wie ich bereits erklärt habe, glaube ich in vielen Fällen wirklich, dass SQLite genau richtig war.
Diese Menge an Datenverwendung ist ein großes Wenn.
JeffO
@ Jeff O: Richtig. Ich würde SQLite nur wählen, wenn die Anzahl der Benutzer relativ niedrig ist (<10-15) und auch die Gesamtdatenmenge nicht hoch ist. Nach unserer Erfahrung beträgt die Gesamtgröße der Datenbank häufig 300-400 MB und fast nie> 1 GB.
1

Das Problem bei Datenbanken ist, dass sie dazu neigen, immer mehr Daten anzusammeln. Wenn Sie eine schlanke Datenbank auswählen, besteht das Risiko, dass Ihr Tool nicht richtig skaliert wird.

quant_dev
quelle