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.
database
windows
linux
operating-systems
Pratik
quelle
quelle
Antworten:
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 ).
quelle
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.
quelle
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:
quelle
sync
Modus). +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 ...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:
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).
Quelle: docs.oracle.com
Laut Dokumentation soll das Dateisystem unter Linux transparent nutzbar sein
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.
quelle
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.
quelle