Warum verwendet Windows / Linux keine relationalen Datenbanken (RDBMS)?


32

Warum verwendet Windows / Linux keine relationalen Datenbanken ( RDBMS )?

Ich weiß, dass sie Dateisysteme zum Speichern aller Daten verwenden, aber halten Sie es nicht für effizienter, Datenbanken zu verwenden, wie wir sie auf Websites / in Web-Apps verwenden?

Bitte erläutern Sie die Verwendung eines Dateisystems über eine Datenbank zur Speicherung.

Dies ist kein Duplikat von Wann sollte die Verwendung der Datenbank dem Parsen von Daten aus einer Textdatei vorgezogen werden? Ich spreche nur von Betriebssystemkontexten, und diese Frage ist verallgemeinert.


32
Ein Dateisystem ist eine Datenbank.

20
Weil Dateisysteme notwendig sind, um Datenbanken zu implementieren .
Kilian Foth

16
Windows verwendet eine Datenbank, die als "Registry" bezeichnet wird. Oder meinst du "relationale Datenbank"? Das ist eine andere Frage.
Doc Brown

6
@ gnasher729 Das Dateisystem ist eine ganz bestimmte Art von Datenbank und daher nur für bestimmte Arten von Daten geeignet. Andere Arten von Daten werden mit verschiedenen Arten von Datenbanken (z. B. relational) besser bedient.

6
@KilianFoth, nicht wirklich. Sie könnten auf eine unformatierte Festplattenpartition schreiben (die nicht mit einer Betriebssystemdatei vergleichbar ist).
Paul Draper

Antworten:


60

Heutzutage speichern die meisten Datenbankverwaltungssysteme (z. B. PostGreSQL , MongoDB usw.) ihre Daten intern in Betriebssystemdateien (in der Vergangenheit verwendeten einige DBMS Partitionen direkt auf unformatierten Datenträgern).

Bei neueren Computern, auf denen noch rotierende Festplatten verwendet werden , ist die Festplatte im Vergleich zur CPU oder zum RAM so langsam, dass das Hinzufügen einiger Softwareschichten nicht relevant ist. Die SSD- Technologie kann dies etwas ändern, und einige Dateisysteme sind für SSDs optimiert.

Dateien sind in den meisten Betriebssystemen im Allgemeinen aus historischen und sozialen Gründen vorhanden (insbesondere C-Compiler und die meisten Tools - Editoren, Linker - möchten Dateien, daher gibt es ein Problem mit Hühnchen und Eiern) und weil es viele sehr gute Dateien gibt System - Implementierungen.

Übrigens können einige wesentliche Systemeinrichtungen Datenbanken verwenden. Beispielsweise kann unter Linux PAM so konfiguriert werden, dass Informationen in Datenbanken verwendet werden (dies wird in der Praxis jedoch selten durchgeführt). Einige Mailserver speichern möglicherweise auch einige oder die meisten ihrer Daten in Datenbanken (z . B. Exim ).

Dateien sind etwas weniger abstrahiert als Datenbanken, sodass sie einfacher zu implementieren (als Dateisysteme und VFS- Ebene im Linux-Kernel) und schneller zu verwenden sind. Insbesondere sind die Vorgänge für Dateien wesentlich eingeschränkter als für Datenbanken. Tatsächlich könnten Sie Dateien oder Dateisysteme als sehr eingeschränkte Datenbanken betrachten!

Sie könnten ein Design - Betriebssystem ohne Dateien , aber mit einer anderen orthogonaler Persistenz Maschinen (zB jeder mit Prozess als persistent, dann sorgen Sie nicht viel explizit über die Lagerung, da das O persistente Ressourcen verwaltet). Dies wurde in mehreren akademischen Betriebssystemen (1) (und auch in den Smalltalk- und Lisp-Maschinen der 1980er Jahre, irgendwie in IBM System i , auch bekannt als AS / 400 , und in einigen von osdev verknüpften Spielzeugprojekten durchgeführt), aber wenn Sie Ihr Betriebssystem auf diese Weise entwerfen, können Sie nicht auf viele vorhandene Tools zurückgreifen (z. B. müssen Sie auch Ihren Compiler und Ihre Benutzeroberfläche von Grund auf neu erstellen, und das ist eine Menge Arbeit).

Beachten Sie, dass Mikrokernel- Betriebssysteme möglicherweise keine Dateien benötigen, die von Kernel-Layern bereitgestellt werden, da die Dateisysteme nur Anwendungsserver sind (z. B. Hurd- Übersetzer, die im Userland ausgeführt werden). Schauen Sie sich auch den Unikernel- Ansatz im heutigen MirageOS an

Linux (und wahrscheinlich Windows, das am meisten von VMS & Unix inspiriert wurde ) benötigen Dateien, um zu funktionieren. Zumindest muss das init- Programm (das erste vom Kernel gestartete Programm) eine ausführbare Datei sein, die in einer Datei gespeichert ist (oft /sbin/init, aber heutzutage könnte es systematisch sein ), und (fast) alle anderen Programme werden mit execve (2 ) gestartet ) syscall muss also in einer datei gespeichert werden. Mit FUSE können Sie jedoch dateiähnliche Semantiken für Nicht-Datei-Objekte festlegen.

Beachten Sie auch, dass sqlite unter Linux (und vielleicht sogar unter Windows, das ich nicht kenne und das ich nie benutzt habe) eine Bibliothek ist, die einige SQL-Datenbanken in Dateien verwaltet und eine API dafür bereitstellt. Es ist allgemein bekannt, dass Android (eine Linux-Variante) viele SQLite-Dateien verwendet (es gibt jedoch immer noch ein POSIX-ähnliches Dateisystem).

Lesen Sie auch über Application Checkpointing (das auf vielen aktuellen Betriebssystemen implementiert ist, um den Prozessstatus in Dateien zu schreiben). Im Extremfall muss dieser Ansatz nicht manuell Anwendungsdateien schreiben (sondern nur den gesamten Prozessstatus mithilfe der Checkpointing-Maschinerie beibehalten).

Tatsächlich ist die interessante Frage, warum aktuelle Betriebssysteme immer noch Dateien verwenden, und die Antwort ist Legacy sowie wirtschaftliche und kulturelle Gründe (leider wollen die meisten Programmiersprachen und Bibliotheken heute immer noch Dateien).


Anmerkung 1: Persistente akademische Betriebssysteme umfassen Lisaac und Grasshopper , aber diese akademischen Projekte scheinen inaktiv zu sein. Schauen Sie auch in http://tunes.org/ ; Es ist inaktiv, hat aber viele Diskussionen über solche Themen geführt.

Anmerkung 2: Der Begriff der Datei hat sich im Laufe der Zeit stark verändert (siehe diese Antwort zu meinen ersten Programmiererfahrungen): Das erste MSDOS auf IBM-PCs der 1980er Jahre (keine Verzeichnisse!), Das VMS -on 1978 Vaxen - (hatte beide Festaufzeichnungen) Dateien und sequentielle Dateien (mit einem primitiven Versionsverwaltungssystem) hatten die 70er-Jahre-Mainframes ( IBM / 370 mit OS / VS2 MVS ) eine ganz andere Vorstellung von Dateien und Dateisystemen (insbesondere, weil zu ihrer Zeit das Verhältnis der Festplattenzugriffszeit zu Die Kernspeicherzugriffszeit betrug einige Tausend - zu diesem Zeitpunkt lief die Festplatte also relativ schneller als heute, auch wenn die heutigen Festplatten absolut sindschneller als im vorigen Jahrhundert, liegt das CPU / Disk-Geschwindigkeits-Verhältnis heute bei etwa einer Million; aber wir haben jetzt SSDs). Dateien sind auch dann weniger (oder gar nicht) nützlich, wenn der Speicher permanent ist (wie bei der CAB500- Magnettrommel in den 1960er-Jahren oder zukünftigen Computern, die MRAM verwenden ).


9
Es ist auch erwähnenswert, dass einige Dateisysteme tatsächlich eine Reihe von RDBMS-Funktionen aufweisen. Beispielsweise werden Dateimetadaten (insbesondere erweiterte Metadaten) in BeFS mit B + -Bäumen indiziert, und der BeOS-Dateimanager verfügte über eine SQL-ähnliche Suchmaschine, mit der indizierte Metadaten nach Dateien durchsucht wurden.
greyfade

2
Ich wage es nicht, sie in meine Antwort aufzunehmen, aber der Blog von tunes.org und J.Pitrat könnte Ihre Ansichten über Software und Betriebssysteme erweitern.
Basile Starynkevitch

4
@greyfade: Ein Dateisystem ist eine Objektdatenbank. Kein mir bekanntes Dateisystem kann relationale Abfragen beantworten (z. B. Dateien mit Änderungszeiten in einem bestimmten Bereich). Dazu müssen Sie die Änderungszeit aller Dateien abfragen und selbst filtern. Einige Dateisysteme bieten eine anständige Leistung, wenn sie direkt als Objektdatenbank verwendet werden (Speichern von Millionen sehr kleiner Dateien, wobei der Dateiname der Schlüssel ist), aber andere sind für diese Art von Arbeitslast in Ordnung.
Peter Cordes

3
@ PeterCordes: BeFS hat das gemacht. Da alle Metadaten B + -Baumindiziert waren, wurden Bereichsabfragen, Platzhalter, Verknüpfungen und andere unterhaltsame Dinge unterstützt. Ich erinnere mich, dass Microsoft in WinFS dasselbe tat.
greyfade

4
Das PalmOS war ein Mainstream-Betriebssystem ohne Dateisystem. Stattdessen gab es eine relationale Datenbank, die direkt auf RAM / Flash implementiert wurde (die ursprüngliche Hardware verwendete keinen Flash-Speicher wie heutige iPhones, sondern batteriegepufferten statischen RAM für RAM und Festplatte).
Slebetman

23

Obwohl dies meinungsbasiert ist, denke ich, dass es nur ein weiteres historisches Artefakt ist. Frühe Betriebssysteme verwendeten ein einfaches Dateisystem-Design für die Leistung, das relativ stark an die Eigenschaften der zu diesem Zeitpunkt verfügbaren Hardware gebunden war, und dies ist seitdem auch so geblieben. Es ist schwierig, die alten Datei-Lese- / Schreib-APIs für mehr Transaktions-Abfrage- / Einfüge-APIs zu ändern, sobald sie eingerichtet wurden.

Alle aktuellen Dateisysteme müssen mit diesen alten APIs abwärtskompatibel sein.

Microsoft hat in der Longhorn- Entwicklung darüber nachgedacht, das Dateisystem durch ein RDBMS-basiertes zu ersetzen . Das war eine zu große Änderung für sie, aber Sie sehen, dass ihre Bemühungen in Form von Windows-Suche (bei der ein RDBMS zum Speichern einer Kopie von Metadaten verwendet wird) und Funktionen wie dem SQL Server-Dateistream- System (bei dem a Die Datenbanktabelle der Dateidaten wird dem Betriebssystem als gewöhnliches Verzeichnis zur Verfügung gestellt, das sowohl den Windows Explorer- Zugriff auf die Daten als auch SQL-Abfragen derselben Daten ermöglicht.

Andere Betriebssysteme haben RDBMS-Dateisysteme. AS / 400s hatten diese, obwohl ich nie genug über sie gelernt habe; Ich erinnere mich, wie seltsam es damals war. Ich denke, andere Mainframe-Systeme haben den gleichen Ansatz.


1
Wenn der Arbeitsspeicher ausreicht
Brian Cline

1
Ja, es wäre großartig, TRANSACTION / COMMIT für Dateiberechtigungen zu BEGINNEN, anstatt eine "Suche mit -exec" durchzuführen. Die Erhöhung des primitiven Dateisystems auf niedriger Ebene, das in das Adminland gelangt, ist ein Zufall und sollte den Weg des Programmier-Plug-Boards gehen. Das "Dateisystem" als richtiges Bytestream-Speicher- und Metadatenverwaltungssystem (obwohl die Interpretation des Bytestream-Inhalts weiterhin den Anwendungsebenen überlassen bleiben sollte, da sonst Kopfschmerzen auftreten)? Ja wir wollen
David Tonhofer

12

Der wahre Grund ist ein Mangel an Bedarf dafür. Das Schichten von Datenbanken auf Dateien, anstatt sie zusammenzuführen, bewältigt die allermeisten Situationen ebenso wie eine zusammengeführte Lösung mit wesentlich geringerer Komplexität. In einigen Situationen, die von anderen erwähnt wurden, haben wir auch Teile von Dateien über Datenbanken gelegt (z. B. Berechtigungsstrukturen). In diesem Fall ist die Datenbank, in der diese Berechtigungen verwaltet werden, erheblich einfacher als ein kommerzielles RDBMS.

Es gibt Vorteile, sie zusammenzulegen, aber bisher waren es nur wenige und weit genug, dass die Bewegung langsam wächst. Bedenken Sie, wie selten jemand sagt: "Geben Sie mir die dritte Spalte jeder Rechnung, die ich seit 2010 erhalten habe, und addieren Sie sie" oder "Lassen Sie mich diese Datei nicht löschen, bis ich sie aus Excel entfernt habe." auch Tabellenkalkulation. "

Dateisysteme haben einige Vorteile gegenüber relationalen Datenbanken, die sie am Laufen halten:

  • Sie sind viel einfacher. Dies ist eine große Sache, wenn ein Computer gebootet wird. Selbst unter Android , wo sie ein RDBMS zum Speichern haben, verfügen sie über einfache alte Images zum Verwalten des anfänglichen Boot-Ladevorgangs.
    • Es ist einfacher, ihre Grenzen zu definieren. In einer unbegrenzten Anzahl von Maschinen bieten RDBMs ziemlich viel Leistung. In der Dateisystemwelt gibt es jedoch viele Einschränkungen, die sich aus dem Versuch ergeben, schnell zu sein, wenn man direkt auf eine sich drehende Festplatte legt. Es ist schwieriger zu beweisen, dass eine RDBMS-Abfrage diese Einschränkungen nicht überschreitet, als die gleichen Garantien für ein Dateisystem zu bieten.
  • Sie handhaben hierarchische Strukturen besser. In vielen Fällen ist es immer noch selbstverständlich, Dateien in hierarchischer Form zu speichern. In RDBMS ist dies ein Sonderfall. Dateisysteme optimieren für diesen speziellen Fall, RDBMS nicht.
  • Zuverlässigkeit. Es ist viel einfacher zu beweisen, dass zwei Schichten unabhängig voneinander funktionieren, als zu beweisen, dass ein riesiges System perfekt funktioniert. RAID- Arrays, ausfallsichere Journale in Zeiten von Stromausfällen und andere erweiterte Funktionen lassen sich einfacher in einer Schicht unterhalb der Schicht implementieren, die sich mit ACID- oder Fremdschlüsseleinschränkungen befasst.

1
Zuverlässigkeit: Sie können die Datenbank über RAID ausführen, genauso wie Sie ein Dateisystem auf einem RAID-Gerät ausführen können, anstatt eine Festplatte direkt zu verwenden. Das Aufzeichnen muss jedoch innerhalb des Dateisystems / der Datenbank erfolgen (es sei denn, Sie möchten Korrektheitsgarantien durch Deaktivieren des Schreib-Caching und nie erneutes Ordnen von E / A-Vorgängen, dh syncModus). +1 für alle anderen Punkte, insbesondere Schnelle hierarchische Leistung, bei der eine Tonne Material in einem Unterverzeichnis die Leistung in einem anderen Unterverzeichnis nicht verlangsamt. Es sei denn, jedes Verzeichnis oder jede Datei ist eine andere Tabelle ...
Peter Cordes

Zuverlässigkeit: Die Betriebssysteme der IBM i-Serie sind zuverlässiger als Sie sich vorstellen können und für die Verwendung im Mainframe-Stil konzipiert. Hierarchien sind nur aufgrund von Dateisystembeschränkungen vorhanden, daher möchte MS später auf dem vorhandenen Dateisystem suchen und DB-Operationen ausführen. Schauen Sie sich Google Mail als Beispiel an, wie Sie eine Hierarchie ohne Verwendung von Hierarchien erstellen können!
gbjbaanb

3

Ich denke, die anderen Antworten liefern ein breites Spektrum von Gründen, warum Betriebssysteme nicht intern / ausschließlich auf relationale Datenbanken angewiesen sind, sodass ich nur eine interessante Information weitergeben werde, auf die ich einmal gestoßen bin.

Anscheinend gibt es Technologien, mit denen Sie relationale Datenbanken als Dateisysteme bereitstellen können, wenn ihre Verwendung gerechtfertigt ist. Oracle DBFS (Database File System) ist ein Beispiel. Dieses Snippet aus der Dokumentation erklärt die Gründe dafür recht gut:

Database File System (DBFS) nutzt die Funktionen der Datenbank zum Speichern von Dateien und die Stärken der Datenbank beim effizienten Verwalten relationaler Daten, um eine Standard-Dateisystemschnittstelle für in der Datenbank gespeicherte Dateien zu implementieren. Mit dieser Schnittstelle ist das Speichern von Dateien in der Datenbank nicht mehr auf speziell für die Verwendung geschriebene Programme BLOBund CLOBprogrammatische Schnittstellen beschränkt. Auf Dateien in der Datenbank kann jetzt mit jedem Betriebssystem (OS), das auf Dateien reagiert, transparent zugegriffen werden.

Die Lösung bietet eine Reihe von Schnittstellen (Befehlszeilenclients, Codebibliotheken) für LOB-Daten, die in Datenbanktabellen gespeichert sind. Dies kann auf Windows- und Linux-Betriebssystemen verwendet werden (obwohl, soweit ich das beurteilen kann, der Integrationsgrad zwischen ihnen variiert).

Oracle DBFS-Komponenten

Quelle: docs.oracle.com

Laut Dokumentation soll das Dateisystem unter Linux transparent nutzbar sein

Unter Linux verfügt das dbfs_clientauch über eine Mount-Schnittstelle, die das FUSEKernelmodul " Filesystem in User Space ( )" verwendet, um einen Dateisystem-Mount-Punkt zu implementieren, der transparenten Zugriff auf die in der Datenbank gespeicherten Dateien bietet und keine Änderungen am Linux-Kernel erfordert. Es empfängt Standarddateisystemaufrufe vom FUSEKernelmodul und übersetzt sie in OCI- Aufrufe für die PL / SQL- Prozeduren im DBFS-Content-Store .

Die Antwort auf Ihre Frage lautet daher, dass es im Allgemeinen keinen Grund für ein Betriebssystem gibt, eine relationale Datenbank als Dateisystem zu verwenden (und im Fall der Kernkomponenten eines Betriebssystems wäre dies tatsächlich problematisch). Gleichzeitig ist es möglich, dies zu tun, wenn ein Problem dies erfordert.


2

Die Hauptfunktion eines Betriebssystems besteht darin, die Interaktion zwischen Anwendungen, Hardware und Benutzern zu erleichtern.

Warum verwendet Windows / Linux keine relationalen Datenbanken (RDBMS)? Dies ist eine Frage von biblischem Ausmaß, aber die kurze Antwort lautet: Es ist kein wirklicher Vorteil, eine komplexe Struktur wie ein rdbms als Dateisystem zu verwenden.

"Relational" ist das operative Wort in "Relational Database" und die meisten Daten, die in einem Dateisystem gespeichert sind, haben keine Beziehung zu anderen Daten. Dateisysteme werden im Allgemeinen als begrenzte Datenbanken implementiert, nur keine relationalen.


Vielleicht wäre eine bessere Frage: Warum benötigen Anwendungen Datenbanken, anstatt Daten einfach in Dateien zu speichern? Ich habe nie eine zufriedenstellende Antwort auf diese Frage gefunden. Alle angeblichen Vorteile einer relationalen Datenbank können mit einer Datei sustem
Sridhar Sarnobat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.