Warum ist SQL in großen Desktop-Anwendungen nicht so verbreitet?

28

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

Arseni Mourzenko
quelle
4
Sprechen Sie für Ihre eigene Plattform. ;) Viele Mac / iPhone-Apps verwenden CoreData, das üblicherweise eine SQLite-Datenbank zum Speichern verwendet.
mipadi
8
Datenbanken sind auch nur "ein Bündel von Dateien". Ich würde argumentieren, dass alle von Ihnen vorgestellten Beispiele in Wirklichkeit Datenbanken sind, nur keine SQL-abfragbaren relationalen Datenbanken.
Allon Guralnek
8
Mit Datenbank meint er relationale Datenbank.
Olivier Jacot-Descombes

Antworten:

20

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.

Jon Hopkins
quelle
5
Ich glaube nicht, dass er die Art von Datenbank meinte, in der Sie einen ganzen Server installieren müssen. SQLite funktioniert ohne Server und ist in Open Source-Anwendungen weit verbreitet.
Laurent
@Laurent - wenn nicht, warum hat er es dann als akzeptierte Antwort markiert, wenn er die unten stehende SQL Lite-Antwort hätte akzeptieren können?
Jon Hopkins
30

Viele Anwendungen integrieren SQLite . Zitieren von ihrer Website:

SQLite ist eine Softwarebibliothek, die eine eigenständige, serverlose, nicht konfigurierbare Transaktions-SQL-Datenbank-Engine implementiert. SQLite ist das weltweit am häufigsten eingesetzte SQL-Datenbankmodul. Der Quellcode für SQLite ist gemeinfrei. "

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.

Rafael Vega
quelle
23

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.

Ed James
quelle
Möglicherweise, weil diese Funktion nicht beworben werden konnte !! ?? Wie kann es sein, dass ich seit den 90er Jahren fast ausschließlich mit Microsoft-Technologien entwickelt habe und noch nie davon gehört habe? Das Fehlen eines guten Frontends könnte ein weiterer Grund sein. Aus Wikipedia: "Jahrelang war es eine private API, die nur von Microsoft verwendet wurde, seitdem ist es jedoch eine veröffentlichte API, die jeder verwenden kann." Außerdem: "JET Blue API wurde 2005 veröffentlicht, um die Verwendung durch eine immer größere Anzahl von Anwendungen und Diensten innerhalb und außerhalb von Windows zu vereinfachen."
Mike unterstützt Monica
8

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.

Jeremy
quelle
Das ist der Punkt: Warum nicht einfach Microsoft SQL Server (Express? Oder eine spezielle Lizenz für einen einzelnen auf jeder Windows-Plattform vorinstallierten SQL Server?) Anstelle eingebetteter (nicht SQL?) Datenbanken oder eines eigenen außerirdischen Binärformats wie Microsoft Outlook verwenden? ?
Arseni Mourzenko
Denn wie er sagte, ist SQL nicht für alles optimal. Viele anwendungsspezifische Datenspeicher werden in hohem Maße für eine Aufgabe optimiert und sind daher schneller als SQL mit einem geringeren Platzbedarf.
Jon Hopkins
3
@MainMa: Sie haben jetzt eine zusätzliche Abhängigkeit hinzugefügt: Der Benutzer muss SQL Server installiert haben und ausführen. Das ist nicht trivial. Wenn auf allen Windows-Computern ein spezieller SQL Server von localhost vorinstalliert war, ist dies möglicherweise anders, aber das passiert nicht.
David Thornley
SQLServer Compact ist einfach zu installieren: Kopieren Sie einfach ein paar Dateien.
MarkJ
7

Warum verwendet Windows selbst keine "zentrale" SQL-Datenbank?

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.

Adam Crossland
quelle
2
Ich erinnere mich noch daran, dass WinFS das "nächste große Ding" für Windows (zu der Zeit) Longhorn war, als ich noch wusste, wie man einen PC benutzt. :-)
Denis de Bernardy
6

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.

JeffO
quelle
1
+1. Sie haben Recht: Es gibt (in den meisten Fällen) keine Mehrfachverbindungen für Desktop-Apps, was den Nutzen einer SQL-Datenbank verringert.
Arseni Mourzenko