Als Softwareentwickler habe ich an Projekten gearbeitet, die von winzigen selbstgemachten Apps bis zu mittelständischen Unternehmensanwendungen reichen. In fast jedem Projekt habe ich eine Datenbank verwendet oder es bereut, sie nicht von Anfang an verwendet zu haben.
Jetzt überlege ich mir ein paar Dinge über die Datenbanken und ihre Verwendung in allgemeinen Anwendungen:
- Warum verwendet Windows selbst keine "zentrale" SQL-Datenbank? Beispielsweise:
- Fehlerberichtsdaten werden in einer Reihe von Dateien gespeichert.
- Windows Update speichert alles in Flat Files,
- Der Icons-Cache wird in einer sehr seltsamen einzelnen Datei gespeichert, auf die anscheinend nicht über SQL usw. zugegriffen werden kann.
- Warum vermeiden so viele große Anwendungen die Verwendung von Datenbanken? Wäre es für Microsoft Outlook beispielsweise nicht vorteilhaft, eine echte Datenbank zu verwenden, anstatt das Rad neu zu erfinden, indem ein eigenes Format für PST-Dateien verwendet und einige Daten in der Registrierung gespeichert werden?
Wenn die Datenbank eine zusätzliche Ebene mit einer Gesamtkomplexität und einem geringfügigen Leistungsverlust hinzufügt, ist dies der Preis für den enormen Vorteil, den Code in den meisten Fällen zu vereinfachen, insbesondere wenn es um die Speicherung kleiner organisierter Datenblöcke anstelle großer Binärdateien geht Streams. Warum verwenden so wenige Produkte tatsächlich Datenbanken? Wahrscheinlich ist die einzige mir bekannte Anwendung, die Sqlite-Datenbank verwendet, Firefox und möglicherweise Microsoft Exchange (aber die letzte ist keine Desktop-Anwendung)?
Außerdem würde das nicht eine Reihe von Anwendungen, wie Microsoft Office oder Microsoft Expression, profitiert von einer mit Unified SQL - Datenbank , so dass es einfacher , die Anwendungen bereitstellen, um Update / Upgrade der Daten, um Daten auszutauschen zwischen diesen Anwendungen machen Backups , etc.?
Antworten:
1) Im Allgemeinen ist der Aufwand für die Ausführung eines vollständigen RDBMS zu hoch und würde das System und die Komplexität unnötig belasten.
Wenn eine installiert ist, wird Ihr Leben als Entwickler einfacher, aber das Leben des Besitzers der Maschine wird schlechter, da die Maschine wahrscheinlich langsamer und mit mehr Problemen läuft. In Entwickler-gegen-Benutzer-Konfrontationen sollte der Benutzer fast immer gewinnen.
2) Viele Datenspeicher haben spezielle Anforderungen, die von SQL Server Express nicht erfüllt werden.
Beispielsweise sollten Fehlerprotokolle so einfach wie möglich geschrieben werden, um die Wahrscheinlichkeit zu maximieren, dass der Schreibvorgang stattfindet und die Daten verfügbar sind. SQL Server wird niemals so einfach sein.
Bei komplexeren Anwendungen liegt das Argument eher in der Optimierung für ganz bestimmte Anwendungsfälle - flache Dateien können blitzschnell sein.
quelle
Viele Anwendungen integrieren SQLite . Zitieren von ihrer Website:
Sie verwenden einfach eine der verfügbaren APIs, erstellen eine Datenbank, Tabellen usw. und die SQL-Engine speichert alles in einer Binärdatei, die Sie an einer beliebigen Stelle im Dateisystem des Benutzers ablegen können. Das Beste von allem ist FLOSS.
quelle
Windows wird mit einem Datenbankmodul mit dem Namen Extensible Storage Engine (ESE) ausgeliefert und verwendet dieses .
ESE wird von Active Directory, Exchange Server, Windows Mail und Desktop Search neben vielen anderen Windows-Diensten und -Anwendungen verwendet.
Für die Entwicklung stehen Open Source ESE-Wrapper zur Verfügung:
Mit ESE, das mit jeder modernen Windows-Version ausgeliefert wird, haben Sie keine Bedenken hinsichtlich der Datenbankbereitstellung. In der Architektur spielt ESE eine ähnliche Rolle wie eingebettete Datenbanken wie SQLite.
quelle
Relationale Datenbanken sind nicht für jede Domäne die effizienteste Datenstruktur. Viele Desktop-Anwendungen verwenden eingebettete Datenbanken. Sie können jedoch nicht ohne Weiteres feststellen, dass sie dies tun, wenn Sie nur ein paar Datendateien sehen.
quelle
Tatsächlich ist diese Idee seit einiger Zeit bei Microsoft in der Entwicklung. Es heißt WinFS . Es ist eine faszinierende Technologie, die MSDN-Abonnenten zur Verfügung steht. In einigen Tagen werde ich es auf einer VM installieren und damit herumspielen.
quelle
Datenbanken bieten Flexibilität und wie jedes Feature sind mit ziemlicher Sicherheit Kosten verbunden. Wenn eine Flat-File-Datei funktioniert, können Sie davon ausgehen, dass niemand die Daten auf unerwartete Weise wie in einem Ad-hoc-Bericht abfragen muss.
Datenbanken können auch mehrere Verbindungen / Eingaben gut verarbeiten. Wenn dies für Ihre Desktop-App nicht erforderlich ist, warum sollten Sie dann die zusätzliche Komplexität hinzufügen? Wie viele andere Anwendungen oder Benutzer versuchen außer über die Benutzeroberfläche / die eigentliche Installation von Outlook selbst, in die Outlook-Datei auf Ihrem Computer zu schreiben?
Es wäre einfacher, wenn alle Daten in einer relationalen Datenbank aus einer Perspektive "Ich möchte in der Lage sein, alle Daten so abzufragen, wie ich es für eine einzelne Sprache wie SQL halte", aber dies ist bei vielen Anwendungen selten eine Priorität.
Die meisten Programmierer werden es sich ansehen von:
Ich weiß, was die App tun soll, das ist alles, was sie tun soll
Meine App ist die einzige Instanz, die jemals auf diese Daten zugreift und / oder diese manipuliert
Eine einfache Dateistruktur meines eigenen Designs wird funktionieren
für mindestens eine Anwendung möchte ich mich nicht auf den Code anderer verlassen und die vollständige Kontrolle haben.
quelle