Pourquoi Windows / Linux n'utilise-t-il pas de bases de données relationnelles (SGBDR)?

32

Pourquoi Windows / Linux n'utilise-t-il pas de bases de données relationnelles ( SGBDR )?

Je sais qu'ils utilisent des systèmes de fichiers pour stocker toutes les données, mais ne pensez-vous pas qu'il est plus efficace d'utiliser des bases de données comme celles que nous utilisons dans les sites Web / applications Web?

Veuillez expliquer l'utilisation d'un système de fichiers sur une base de données pour le stockage.

Ce n'est pas un double de Quand faut - il utiliser la base de données préférable à l' analyse des données à partir d' un fichier texte? Je ne parle que de contextes de système d'exploitation, et cette question est généralisée.

Pratik
la source
32
Un système de fichiers est une base de données.
20
Parce que les systèmes de fichiers sont nécessaires pour mettre en œuvre des bases de données.
Kilian Foth
16
Windows utilise une base de données, elle s'appelle "Registre". Ou voulez-vous dire "base de données relationnelle"? C'est une question différente.
Doc Brown
6
@ gnasher729 Le système de fichiers est un type de base de données très particulier et ne convient donc que pour des types de données particuliers. Les autres types de données sont mieux gérés avec différents types de bases de données (par exemple, relationnelles).
6
@KilianFoth, pas vraiment. Vous pourriez écrire sur une partition de disque brute (qui n'est pas comparable à un fichier de système d'exploitation).
Paul Draper

Réponses:

60

Aujourd'hui, la plupart des systèmes de gestion de bases de données ( PostGreSQL , MongoDB , etc., par exemple ) conservent leurs données en interne dans des fichiers de système d'exploitation (certains SGBD utilisaient auparavant directement des partitions de disque brutes).

Sur les ordinateurs récents qui utilisent encore des disques durs en rotation , le disque est si lent - par rapport au processeur ou à la RAM - que l’ajout de quelques couches logicielles n’est pas pertinent. La technologie SSD peut changer cela un peu, et certains systèmes de fichiers sont optimisés pour les SSD.

Les fichiers sont présents dans la plupart des systèmes d’exploitation en général pour des raisons historiques et sociales (en particulier, les compilateurs C et la plupart des outils - éditeurs, éditeurs de liens - veulent des fichiers, il existe donc un problème de type poule et œuf), et parce qu’il existe de très bons fichiers. implémentations du système .

En passant, certaines installations système essentielles peuvent utiliser des bases de données. Par exemple, sur Linux, PAM peut être configuré pour utiliser des informations dans des bases de données (mais cela est rarement fait en pratique). En outre, certains serveurs de messagerie peuvent stocker une partie ou la plupart de leurs données dans des bases de données (par exemple, Exim ).

Les fichiers sont des abstractions légèrement inférieures aux bases de données, ils peuvent donc être plus faciles à implémenter (comme les systèmes de fichiers et la couche VFS dans le noyau Linux) et plus rapides à utiliser. En particulier, les opérations sur les fichiers sont beaucoup plus restreintes que celles sur les bases de données. En fait, vous pourriez voir des fichiers ou des systèmes de fichiers comme des bases de données très restreintes!

Vous pouvez concevoir un système d' exploitation sans aucun fichier , mais avec une autre orthogonale la persistance des machines (par exemple , ayant tous les processus persistants, alors vous ne se soucient pas beaucoup explicitement sur le stockage, car le système d' exploitation gère les ressources persistantes). Cela a été fait dans plusieurs systèmes d'exploitation académiques (1) (ainsi que dans les machines Smalltalk et Lisp des années 1980, dans IBM System i , AS / 400 , et dans certains projets de jouets liés à osdev).), mais lorsque vous concevez votre système d'exploitation de cette manière, vous ne pouvez pas tirer parti de nombreux outils existants (par exemple, vous devez également créer votre compilateur et votre interface utilisateur à partir de zéro, ce qui représente beaucoup de travail).

Notez que les systèmes d’exploitation à micro - noyau peuvent ne pas nécessiter de fichiers fournis par les couches du noyau, car ils ne sont que des serveurs d’applications (par exemple, des traducteurs Hurd fonctionnant en mode utilisateur). Regardez aussi l' approche unikernel dans MirageOS d'aujourd'hui

Linux (et probablement Windows, qui tire principalement son inspiration de VMS et Unix ) a besoin de fichiers pour fonctionner. À tout le moins, le programme init (le premier programme démarré par le noyau) doit être un exécutable stocké dans un fichier (souvent /sbin/init, mais il pourrait être systemd de nos jours), et (presque) tous les autres programmes sont lancés avec execve (2). ) syscall doit donc être stocké dans un fichier. Cependant, FUSE vous permet de donner une sémantique semblable à un fichier à des choses qui ne sont pas des fichiers.

Notez également que sous Linux (et peut-être même Windows, que je ne connais pas et que je n’ai jamais utilisé), sqlite est une bibliothèque qui gère une base de données SQL dans des fichiers et fournit une API pour cela. Il est bien connu qu'Android (une variante de Linux) utilise beaucoup de fichiers sqlite (mais il possède toujours un système de fichiers de type POSIX).

Lisez également sur le point de contrôle des applications (qui, sur de nombreux systèmes d’exploitation actuels, est implémenté pour écrire l’état du processus dans des fichiers). Poussée à l'extrême, cette approche n'a pas besoin d'écrire manuellement les fichiers de l'application (mais uniquement de conserver l'état complet du processus à l'aide de la machine à points de contrôle).

En fait, la question intéressante est de savoir pourquoi les systèmes d’exploitation actuels utilisent encore des fichiers, et la réponse est un héritage et des raisons économiques et culturelles (malheureusement, la plupart des langages de programmation et des bibliothèques veulent encore des fichiers).


Note 1: Les systèmes d’exploitation académiques persistants incluent Lisaac & Grasshopper , mais ces projets académiques semblent inactifs. Regardez aussi dans http://tunes.org/ ; il est inactif, mais a beaucoup de discussions autour de tels sujets.

Note 2: la notion de fichier a beaucoup évolué au fil du temps (regardez cette réponse à propos de mes premières expériences de programmation): le premier MSDOS sur PC IBM des années 1980 (pas de répertoires!), Le VMS (1978) Vaxen - (à enregistrement fixe) fichiers et fichiers séquentiels, avec un système de gestion des versions primitif), les ordinateurs centraux des années 1970 ( IBM / 370 avec OS / VS2 MVS ) avaient une notion très différente de fichiers et de systèmes de fichiers (en particulier parce qu’à leur époque le rapport temps d ’accès au disque dur Le temps d’accès à la mémoire principale était de quelques milliers d’années. Ainsi, à l’époque, le disque était relativement plus rapide qu’aujourd’hui, même si les disques actuels sont absolumentplus rapide qu'au siècle précédent, le rapport de la vitesse CPU / disque est aujourd'hui d'environ un million; mais nous avons maintenant des disques SSD). De plus, les fichiers sont moins utiles (ou même pas utiles) lorsque la mémoire est persistante (comme sur le tambour magnétique CAB500 , années 1960 ou sur les futurs ordinateurs utilisant MRAM ).

Basile Starynkevitch
la source
9
Il est également intéressant de noter que certains systèmes de fichiers possèdent en réalité un certain nombre de fonctionnalités de SGBDR. Par exemple, les métadonnées de fichier (en particulier les métadonnées étendues) dans BeFS sont indexées avec des arbres B +, et le gestionnaire de fichiers BeOS disposait d'un moteur de recherche de type SQL qui effectuait une recherche dans les métadonnées indexées pour trouver des fichiers.
Greyfade
2
Je n'ose pas les mettre dans ma réponse, mais le blog de tunes.org & J.Pitrat pourrait élargir vos points de vue sur les logiciels et les systèmes d'exploitation.
Basile Starynkevitch le
4
@greyfade: un système de fichiers est une base de données objet. Je ne connais aucun système de fichiers capable de répondre à des requêtes relationnelles (par exemple, des fichiers avec des temps de modification compris dans une plage donnée). Vous devez le faire en interrogeant le temps de modification de tous les fichiers et en vous filtrant vous-même. Certains systèmes de fichiers fonctionnent correctement lorsqu'ils sont utilisés directement comme base de données d'objets (stockant des millions de très petits fichiers, où le nom du fichier est la clé), mais d'autres fonctionnent correctement avec ce type de charge de travail.
Peter Cordes
3
@PeterCordes: BeFS l'a fait. Étant donné que toutes les métadonnées étaient indexées B +, elles prenaient en charge les requêtes d'intervalle, les caractères génériques, les jointures et autres éléments amusants. Je me souviens avoir entendu dire que Microsoft faisait la même chose dans WinFS.
Greyfade
4
Le PalmOS était un système d’exploitation assez grand public qui n’avait pas de système de fichiers. Au lieu de cela, il disposait d'une base de données relationnelle mise en œuvre directement sur RAM / flash (le matériel d'origine n'utilisait pas de mémoire flash comme celle des iPhones actuels, mais utilisait de la RAM statique sauvegardée sur batterie pour la RAM et le disque).
Slebetman
23

Bien que ce soit basé sur l'opinion, je pense que c'est juste un autre artefact historique. Les premiers systèmes d'exploitation utilisaient une conception de système de fichiers simple pour des performances raisonnablement fortement liées aux caractéristiques du matériel disponible à l'époque, et ce, depuis lors. Il est difficile de remplacer les anciennes API de lecture / écriture de fichiers par d'autres API de requête / insertion transactionnelles une fois qu'elles ont été établies.

Tous les systèmes de fichiers actuels exigent une compatibilité ascendante avec ces anciennes API.

Microsoft avait envisagé de remplacer le système de fichiers par un système basé sur le SGBDR , dans le développement de Longhorn . C’était trop pour changer, mais vous voyez que leurs efforts se poursuivent sous la forme de Windows Search (où un SGBDR est utilisé pour stocker une copie des métadonnées) et de fonctionnalités telles que le système Filestream de SQL Server (où La table de base de données des données de fichier est exposée au système d'exploitation sous la forme d'un répertoire ordinaire permettant à l' explorateur Windows d' accéder aux données et aux requêtes SQL des mêmes données).

D'autres systèmes d'exploitation ont des systèmes de fichiers SGBDR. Les AS / 400 en avaient l' habitude, même si je n'en ai jamais appris assez sur eux; Je me souviens à quel point il était étrange à l’époque). Je pense que d'autres systèmes mainframe ont le même type d'approche.

gbjbaanb
la source
1
Si la mémoire est suffisante, pensez peut-être à DB2 UDB sous OS / 400, également appelé i5 / OS (désormais appelé simplement "IBM i"): publib.boulder.ibm.com/iseries/v5r2/ic2924/info/rzamb/…
Brian Cline
1
Oui, ce serait bien de COMMENCER TRANSACTION / COMMIT sur les autorisations de fichiers au lieu de "rechercher avec -exec". L’élévation du système de fichiers primitif de bas niveau dans adminland est accidentelle et devrait aller dans le sens du tableau de programmation. Le "système de fichiers" en tant que système de stockage de bytestream et de gestion de métadonnées approprié (bien que l'interprétation du contenu de bytestream doive toujours être laissée aux couches de l'application, sans quoi des maux de tête se produiront)? Oui nous voulons!
David Tonhofer
12

La vraie raison est un manque de besoin pour cela. La superposition de bases de données au-dessus des fichiers, plutôt que leur fusion, gère la grande majorité des situations au moins aussi bien qu'une solution fusionnée avec une complexité considérablement réduite. Dans certaines situations, d'autres ont mentionné, nous avons également superposé des parties de fichiers sur des bases de données (telles que des structures d'autorisations). Dans ce cas, la base de données qui gère ces autorisations est remarquablement plus simple qu’un SGBDR commercial.

Les fusionner présente des avantages, mais jusqu'à présent, ceux-ci ont été peu nombreux et suffisamment éloignés pour que le mouvement progresse lentement. Considérez combien il est rare que des gens disent «Donnez-moi la 3ème colonne de chaque facture que j'ai reçue depuis 2010 et additionnez-les» ou «Ne me laissez pas supprimer ce fichier tant que je ne l'ai pas supprimé de Excel. tableur aussi. "

Les systèmes de fichiers présentent quelques avantages par rapport aux bases de données relationnelles:

  • Ils sont beaucoup plus simples. C'est un gros problème lorsque vous démarrez un ordinateur. Même sous Android , où ils ont un SGBDR pour le stockage, ils ont d'anciennes images simples pour gérer le processus de chargement initial.
    • Il est plus facile de définir leurs limites. Dans une machine illimitée, les RDBM fournissent beaucoup de puissance. Cependant, dans le monde des systèmes de fichiers, il existe de nombreuses limitations dues au fait d’essayer d’être rapide lorsqu’il est superposé directement sur un disque en rotation. Il est plus difficile de prouver qu'une requête de SGBDR ne dépasse pas ces limites, mais de fournir les mêmes garanties pour un système de fichiers.
  • Ils gèrent mieux les structures hiérarchiques. Dans de nombreux cas, il est toujours naturel pour les personnes de stocker des fichiers sous une forme hiérarchique. Dans les SGBDR, c'est un cas particulier. Les systèmes de fichiers optimisent pour ce cas particulier, pas les SGBDR.
  • Fiabilité. Il est beaucoup plus facile de prouver que deux couches fonctionnent indépendamment que de prouver qu'un système géant fonctionne parfaitement. Les matrices RAID , les journaux à sécurité intégrée en cas de panne de courant et d'autres fonctionnalités avancées sont plus faciles à implémenter dans une couche située sous la couche, qui traite d'éléments tels que les contraintes de clé étrangère ou ACID .
Cort Ammon - Rétablir Monica
la source
1
fiabilité: vous pouvez exécuter la base de données sur RAID tout comme vous pouvez exécuter un système de fichiers sur un périphérique RAID, par opposition à l'utilisation directe d'un disque. La journalisation doit toutefois être effectuée dans le système de fichiers / base de données (à moins que vous souhaitiez plutôt fournir des garanties de correction en désactivant la mise en cache en écriture et en ne réorganisant jamais les E / S. Par exemple, le syncmode.) +1 pour tous vos autres points, en particulier. performance hiérarchique rapide, où une tonne de choses dans un sous-répertoire ne ralentit pas la performance dans un autre sous-répertoire. À moins que chaque répertoire ou fichier ne soit une table différente ...
Peter Cordes
fiabilité: les systèmes d'exploitation de la série IBM i sont conçus pour être plus fiables que vous ne pouvez l'imaginer, car ils sont conçus pour être utilisés dans le style mainframe. Les hiérarchies ne sont présentes qu’en raison des limitations du système de fichiers, ce qui veut que MS souhaite effectuer ultérieurement des recherches et des opérations de base de données au sommet du système de fichiers existant. Regardez l'exemple de gmail pour savoir comment vous pouvez avoir une hiérarchie sans utiliser de hiérarchies!
gbjbaanb
3

Je pense que les autres réponses fournissent un large éventail de raisons pour lesquelles les systèmes d’exploitation ne reposent pas exclusivement sur des bases de données relationnelles en interne, je vais donc partager un élément d’information intéressant que j’ai découvert par hasard.

Apparemment, certaines technologies vous permettent de monter des bases de données relationnelles en tant que systèmes de fichiers lorsque leur utilisation est justifiée. Oracle DBFS (système de fichiers de base de données) est un exemple. Cet extrait de la documentation explique très bien la raison d'être de celui-ci:

Le système de fichiers de base de données (DBFS) exploite les fonctionnalités de la base de données pour stocker les fichiers, ainsi que les atouts de la base de données pour la gestion efficace des données relationnelles, afin de mettre en œuvre une interface de système de fichiers standard pour les fichiers stockés dans la base de données. Avec cette interface, le stockage de fichiers dans la base de données n'est plus limité aux programmes spécifiquement conçus pour être utilisés BLOBet CLOBaux interfaces de programmation. Les fichiers de la base de données sont désormais accessibles de manière transparente à l’aide de n’importe quel programme de système d’exploitation (OS) agissant sur les fichiers.

La solution fournit un ensemble d'interfaces (clients en ligne de commande, bibliothèques de codes) pour les données LOB stockées dans des tables de base de données. Ceci peut être utilisé sur les systèmes d’exploitation Windows et Linux (bien que, pour autant que je sache, le niveau d’intégration varie entre eux)

Composants DBFS Oracle

Source: docs.oracle.com

Selon la documentation, le système de fichiers devrait pouvoir être utilisé de manière transparente sous Linux.

Sous Linux, l' dbfs_clientinterface utilisateur possède également une interface de montage qui utilise le FUSEmodule de noyau Système de fichiers du User Space ( ) pour implémenter un point de montage du système de fichiers offrant un accès transparent aux fichiers stockés dans la base de données et ne nécessitant aucune modification du noyau Linux. Il reçoit des appels de système de fichiers standard du FUSEmodule du noyau et les traduit en appels OCI aux procédures PL / SQL du magasin de contenu DBFS .

Par conséquent, la réponse à votre question est qu’en général, il n’ya aucune raison pour un système d’exploitation d’utiliser une base de données relationnelle en tant que système de fichiers (et dans le cas des composants principaux d’un système d’exploitation, cela poserait effectivement des problèmes). En même temps, il est possible de le faire quand un problème l’appelle.

Toniedzwiedz
la source
2

La fonction principale de tout système d'exploitation est de faciliter les interactions entre les applications, le matériel et les utilisateurs.

Alors .. pourquoi les systèmes d’exploitation Windows / Linux n’utilisent-ils pas de bases de données relationnelles (SGBDR)? Ceci est une question de proportions bibliques, mais la réponse courte est: Il n’ya aucun avantage réel à tirer de l’utilisation d’une structure complexe telle qu’un rdbms en tant que système de fichiers.

"Relationnel" est le mot clé dans "Base de données relationnelle" et la plupart des données stockées dans un système de fichiers ne sont pas liées à d'autres données. Les systèmes de fichiers sont généralement implémentés sous forme de bases de données limitées, mais pas de bases de données relationnelles.

Nik Pfirsig
la source
Peut-être une meilleure question serait: pourquoi les applications ont-elles besoin de bases de données au lieu de simplement conserver des données dans des fichiers? Je n'ai jamais trouvé de réponse satisfaisante à cette question. Tous les avantages supposés d'une base de données relationnelle peuvent être obtenus avec un fichier sustem
Sridhar Sarnobat