Wie lässt sich am besten feststellen, wann die Verwendung einer Datenbank angemessen ist?

13

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?

Kenneth
quelle
2
"Allerdings sehe ich, soweit ich das beurteilen kann, keine Anwendungen (die ich verwende), die sehr oft eine Datenbank verwenden"? Basierend worauf? Wenn sie SQLite verwenden, wie können Sie feststellen, ob sie eine Datenbank verwenden oder nicht?
S.Lott
Deshalb habe ich gesagt, soweit ich weiß, dass ich mich möglicherweise geirrt habe. Ich dachte mir, dass es einige Apps geben könnte, die eingebettete Datenbanken verwenden ... Ist es ziemlich üblich, dass Apps Datenbanken verwenden?
Kenneth
@Kenneth: Bitte googeln Sie nach eingebetteten Datenbanken wie SQLite. Da sind viele. Sie sind weit verbreitet. AFAIK, Apples iOS nutzt es für alle Ausdauer. Bitte Google.
S.Lott
2
Ich google viel. Manchmal ersetzt aber nichts erfahrene Meinungen, die man beim Googeln nicht immer findet.
Kenneth
1
Ich denke, diese Kommentare sind ausreichend, um die fehlerhafte Annahme zu korrigieren. Ich entschuldige mich für den Fehler. Ich denke, ich benutze eine gesunde Mischung aus googeln und fragen. Manchmal gibt es keinen Ersatz für letztere IMHO. Jetzt wird mein Googeln gezielter und produktiver.
Kenneth

Antworten:

4

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

Steven A. Lowe
quelle
7

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.

Bobby Tische
quelle
Sie würden also empfehlen, eine Datenbank nicht für eigenständige Apps zu verwenden, es sei denn, große Datenmengen rechtfertigen dies wirklich?
Kenneth
Was denkst du über die Verwendung von leichten DBs ... genau wie bei den Full-Scale-DBs?
Kenneth
1
@Kenneth: Ich würde sagen "es kommt darauf an". Wenn die App große Mengen tabellarischer Daten benötigt, für die eine ordnungsgemäße Datenbank erforderlich ist, ist das Argument möglicherweise stark genug, um die App mit einer kompakten Datenbank auszuliefern. Aber wenn es sich nur um Konfigurationsdaten handelt, ist es wahrscheinlich übertrieben.
Bobby Tables
5

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.

GroßmeisterB
quelle
+1 Wenn Sie keine komplexen Persistenzprobleme haben, wie z. B. das gleichzeitige Blockieren von Updates für mehrere Benutzer und Standorte, ist eine herkömmliche Datenbank möglicherweise überlastet. Wenn die fraglichen Daten ziemlich statisch sind (sie können anwachsen oder angehängt werden, sich aber nicht entwickeln oder aktualisiert werden) und Konflikte / Konkurrenz nicht häufig oder pervers sind (Nebenwirkungen / Benutzererfahrung beim Warten auf eine Sperre, um sie freizugeben) In Anbetracht der Leistung und Komplexität ist dies nicht inakzeptabel. Möglicherweise benötigen Sie keine Datenbank.
JustinC
4

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.

Carson63000
quelle
1
Ein sehr ähnliches Beispiel auf der Java-Seite ist Derby. Ich denke, es gibt auch andere.
Jprete
1
Das klingt nach einer idealen Lösung ... Es macht mir wirklich Spaß, db's zu benutzen! lol
Kenneth
Gibt es Nachteile bei der Verwendung von leichten Datenbanken?
Kenneth
@Kenneth: Sie vergrößern Ihre Installation und können die Codebasis erhöhen. Dies ist jedoch viel weniger als die Installation eines vollständigen Datenbankservers auf einem Client. Dies erfolgt normalerweise nur, wenn die Anwendung verteilt ist und eine umfangreichere Datenbank benötigt. Die Berkeley DB ist eine der am häufigsten verwendeten.
Orbling
Eine weitere Option ist SQLite, das sowohl im RAM als auch auf dem Festplattenspeicher viel leichter ist und keine willkürlichen Einschränkungen aufweist. Kein Wunder, dass es von allen Nicht-MS-Smartphones und Webbrowsern verwendet wird.
Javier
2

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 memcachedWarteschlangensysteme 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.

Javier
quelle
1

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:

#include "superheader.h"

int main()
{
    int row=2, column=2;
    DatabaseType db;
    db.ConnectTo("programDB", "user", "pass");
    db.setTable("messages");
    string hello_world=db.fetch(row, column);
    cout<<hello_world;
    return 0;
}

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.

Garet Claborn
quelle
1

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.

davidk01
quelle