Ich habe meine Programmierkarriere in der Webentwicklung mit PHP und MySQL begonnen. Ich habe mich ziemlich daran gewöhnt, db zum Speichern der meisten dynamischen Daten sowie einiger Einstellungs- / Parameterdaten zu verwenden. Manchmal gab es viele Daten, während zu anderen Zeiten nur wenige Einträge in den Tabellen vorhanden waren. Für mich schien dies nur natürlich und soweit ich weiß, ist dies ein mehr oder weniger akzeptabler Ansatz in der Webentwicklung. (Bitte korrigiere mich wenn ich falsch liege...)
Ich beschäftige mich jetzt mit Desktop-Anwendungen, und meine natürliche Neigung ist es, wieder eine Datenbank zu verwenden, um viele Informationen zu speichern, die durch die Verwendung der Anwendung generiert werden. Soweit ich das beurteilen kann, sehe ich jedoch keine Anwendungen (die ich verwende), die sehr oft eine Datenbank verwenden. [EDIT: Es wurde darauf hingewiesen, dass dies eine fehlerhafte Annahme war, da viele Anwendungen Lightweight-DBS verwenden, die in das Programm selbst eingebettet sind.] Was ist der Grund dafür? An welchem Punkt ist es angebracht, eine Datenbank zu verwenden? Gibt es diesbezüglich irgendwelche Standards? Was sind auch die Gründe, eine Datenbank NICHT zur Entwicklung einer Desktop-Anwendung zu verwenden?
quelle
Antworten:
Wenn Ihre Anwendung dokumentenorientiert ist, speichern Sie die Dinge in einer Dokumentdatei
Wenn Ihre Anwendung strukturiertere Daten verarbeitet, die für ein einzelnes Dokument (z. B. ein XML-Dokument) zu groß sind, verwenden Sie eine Datenbank
quelle
Ein Datenbanksystem wurde traditionell als relativ umfangreicher Dienst angesehen, den Sie nicht unbedingt auf jedem Client-Computer installieren wollten. Ich war in der Tat in Situationen (Entwicklung einer Desktop-GUI-App, in denen viele Daten gespeichert werden mussten), in denen ein echtes DB-System eine "ideale" Lösung gewesen wäre - aber damals waren die einzigen verfügbaren Datenbanken relativ schwer. Stattdessen haben wir uns für flache Dateien entschieden.
Obwohl es heutzutage einige leichtere Datenbanken gibt, ist dies immer noch ein gültiges Argument gegen clientseitige Datenbanken. Stellen Sie sich eine einfache kleine Desktop-App vor (z. B. ein einfaches Desktop-Spielzeug oder -Spiel), in der ein paar Dutzend Einstellungen und Parameter gespeichert werden müssen. Es scheint übertrieben, eine Person dazu zu bringen, MySQL zu installieren, nur um Ihre App auszuführen.
Bei der Webentwicklung ist der Server natürlich ein Back-End, bei dem eine Datenbank zur Selbstverständlichkeit gehört. z.B. Die Benutzer müssen sich am Ende keine Gedanken mehr über die Installation einer Datenbank machen.
quelle
Desktopanwendungen behalten ihren Status bei, während sie ausgeführt werden. Während Web-Entwicklung in der Regel nicht. Während Sie also möglicherweise eine Benutzereinstellung zwischen den Seitenladevorgängen in einer Datenbank speichern müssen, behalten Sie sie in einer Desktop-App nur im Speicher. Dadurch wird der Bedarf an solchen dauerhaften Speichern erheblich reduziert. Wenn Sie Einstellungen zwischen den Verwendungszwecken speichern möchten, können Sie sie alle in einer Datei speichern oder an einem Ort wie der Windows-Registrierung ablegen.
Allerdings werden Datenbanksysteme häufig in Desktop-Apps eingesetzt. Lange vor dem Web waren Desktop-Anwendungen mit DBMS verbunden. In erster Linie für Anwendungen, die nicht dokumentenbasiert sind. Obwohl heutzutage mit der besseren Verfügbarkeit von leichten Motoren, sehen Sie die Linien ein wenig verschwommen. Zum Beispiel verwende ich SQLite-Datenbanken als Dokumente in einigen meiner Apps.
quelle
Eine Sache, die Sie sich ansehen sollten, sind schlanke Datenbanken, für die kein Datenbankdienst ausgeführt werden muss. Zum Beispiel gibt es an der Microsoft-Front SQL Server Compact , das kostenlos ist, nur eine einzige Datei für die Datenbank und einige der App hinzugefügte DLLs benötigt und sich aus Entwicklersicht ähnlich verhält wie ein "echter" SQL Server.
Ich bin mir sicher, dass es auf anderen Plattformen ähnliche Optionen gibt.
quelle
In Webanwendungen ist es wichtig, den permanenten Status in einem zentralen Speicher zu speichern. Da es sich bei der Web-App in der Regel um einen ersten Engpass handelt, ist es wichtig, dass Sie sie nur verteilen können, ohne sich fragen zu müssen, welche Kopie die Daten enthält (Prinzip „Shared Nothing“). Nicht nur eine Datenbank, sondern auch
memcached
Warteschlangensysteme sind aus demselben Grund vorhanden.Desktop-Apps haben nicht dasselbe Skalierbarkeitsziel. In der Regel werden die meisten Daten lokal auf jeder Arbeitsstation gespeichert. Die gemeinsame Nutzung von Daten ist in den meisten Fällen ein anderes Problem. Damit entfällt ein wichtiger Grund für die Verwendung einer Datenbank.
GUI-Anwendungen können auch komplexe Dokumente enthalten, die als komplexes Netz von Objekten im Speicher behandelt werden können. Das Normalisieren der Struktur in ein relationales DB-Schema kann zu einer erheblichen Komplexität des Problems führen. Manchmal ist es einfacher, das Ganze in einem einzigen Bytestream zu serialisieren. Viele OOP-Frameworks enthalten einige Funktionen, die genau dafür vorgesehen sind.
In vielen Fällen ist es jedoch von großem Vorteil, die gespeicherten Dokumente mit Tools außerhalb der Hauptanwendung lesbar zu machen. Daher werden entweder für Menschen lesbare Formate (XML, JSON, YAML usw.) oder eine Zip-Datei, in der mehrere einfachere Teile zusammengeführt werden, immer umfangreicher häufiger.
Ebenso ist die Verwendung einer einbettbaren Datenbankbibliothek (BDB, Tokyo Cabinet, SQLite, MS-SQL * -Server Compact usw.) ein guter Ansatz.
quelle
Datenbanken werden Overkill können , aber sie in der Regel nicht haben zu sein. Sehr einfache Programme brauchen sie einfach nicht. Wenn Ihr Dokument in trivialer Zeit in den Speicher geladen werden kann und dort ohne Probleme verbleibt, benötigen Sie für viele Programme nicht wirklich eines.
Betrachten Sie zum Beispiel:
Nun, das ist zu simpel, aber offensichtlich ist das einfach zu viel. Es hat keinen wirklichen Sinn, dieses Datenmanagementniveau für "Hello World" zu haben.
Normalerweise gilt als Faustregel, dass Sie eine Datenbank verwenden, wenn Sie über viele Datensätze verfügen , insbesondere, wenn diese eindeutig unterschiedlich sind, oder eine Datenbank verwenden, wenn die Datenmenge sehr groß ist. Datenbanken sind im Allgemeinen mit einigem Overhead verbunden, aber es gibt viele, die nicht wirklich viel haben. Beispielsweise sind kleine, kompakte In-Memory-Datenbanken manchmal nützlich für kleine Projekte, bei denen die Verarbeitung, Planung oder viele dynamische Änderungen an den Daten sehr umfangreich sind.
Es gibt verschiedene Codierungsstile, viele Male ist an einer Datenbank nichts auszusetzen, aber die meisten von uns gehen bei grundlegenden Aufgaben einfach nicht so weit. Es gibt noch andere Fälle, in denen die richtige Datenbank Leistungsvorteile bietet. Versuchen Sie insbesondere die Unterschiede zu verstehen, in denen sich die Daten befinden, wie lange sie dort sein werden und was sie während ihrer Lebensdauer verändert.
quelle
Die Verwendung einer Datenbank ist immer das Richtige, und mit SQLite-Implementierungen für praktisch jede Sprache, die es nicht gibt, ist die Entscheidungsfindung beim Design einfach mangelhaft. Der einzige Grund, warum Sie keinen verwenden sollten, ist eingebettete Programmierung oder eine andere Art von nicht anwendungsbezogener Programmierung. Das Abfragen von Daten und Einstellungen mit einer deklarativen Sprache wie SQL ist viel natürlicher als das Durchlaufen von Flatfiles oder anderen Objekten im Speicher mit imperativer Syntax. Außerdem werden die Datenoperationen sauber von anderem Anwendungscode getrennt, wodurch Code auf lange Sicht modularer und wartbarer wird.
quelle