Comment avons-nous été confrontés au système de fichiers (hiérarchique) en tant que structure de données de base?

19

Je suis autodidacte et je n'ai pas de diplôme CS. Plus j'en apprends sur la structure des données, plus je me demande, de nos jours, comment sommes-nous encore confrontés au système de fichiers, aux répertoires et aux fichiers, en tant que structure de stockage de données de base sur le système d'exploitation?

J'en comprends la simplicité, mais il semble aujourd'hui qu'il pourrait y avoir plus d'options disponibles nativement. Pour autant que je sache, le seul projet pour améliorer les fonctionnalités de base du système de fichiers était ReiserFS, où vous pouviez savoir quelle ligne d'un fichier avait été modifiée par qui et quand.

Par exemple, si je pouvais avoir un balisage natif pour les fichiers, où je pourrais baliser des images, des diagrammes, des documents de traitement de texte, un référentiel de code entier, le tout comme appartenant à un seul projet, cela me serait vraiment utile. Comme je suis coincé dans le paradigme du système de fichiers, je sais que je pourrais mettre tous ceux-ci dans un seul dossier / répertoire, mais que faire s'ils existent déjà dans des répertoires disparates et qu'ils doivent y rester? Je sais qu'il existe des programmes qui peuvent le faire, mais pourquoi ne sont-ils pas sur le système de fichiers?

Quelque chose qui serait bien d'avoir, c'est une sorte de fonctionnalité relationnelle dans le système de fichiers, comme vous obtenez avec les SGBDR. Je comprends que cela devait faire partie de Vista / 7, mais cela est également tombé de la liste des fonctionnalités.

Bien sûr, n'importe quel programme peut stocker un fichier binaire et avoir la structure de données qu'il souhaite, par pourquoi le système d'exploitation ne pourrait-il pas proposer des moyens plus complexes de stockage de données, au-delà de la simple hiérarchie du système de fichiers?

user1936
la source
2
Le noyau doit être simple. Le ballonnement optionnel que vous mentionnez devrait aller au-dessus d'un noyau simple. Sinon, attendez deux décennies et quelqu'un réinventera la notion de système de fichiers.
Job
3
"Et s'ils existent déjà dans des répertoires disparates et qu'ils doivent y rester?" Parfois, vous pouvez utiliser des liens physiques pour résoudre ce problème ...
FrustratedWithFormsDesigner
1
En outre, quelques lectures intéressantes sur le sujet: c2.com/cgi/wiki?FileSystemAlternatives
FrustratedWithFormsDesigner
3
Pas vraiment une solution dans Windows 7, mais les nouvelles bibliothèques peuvent vous offrir certaines des fonctionnalités qui vous intéressent: lifehacker.com/#!5464350/…
DKnight
1
Si je veux mettre un fichier dans deux dossiers différents à la fois, je mets un raccourci vers ce fichier en un seul. L'inconvénient est que si vous déplacez ce dossier / fichier, le raccourci sera invalide.
Mateen Ulhaq

Réponses:

17

Commencez par ceci: http://en.wikipedia.org/wiki/Unix_File_System

Lisez ceci: http://www.unix.org/what_is_unix/history_timeline.html

Lisez ensuite ceci: http://www.amazon.com/UNIX-Filesystems-Evolution-Design-Implementation/dp/0471164836

Il y a une réponse simple à "pourquoi le système d'exploitation ne pourrait-il pas offrir des moyens plus complexes de stockage de données, au-delà de la simple hiérarchie du système de fichiers?"

Parce que c'est trop pour le système d'exploitation.

C'est à cela que servent les bibliothèques et les packages d'applications.

Oracle, par exemple, vous vendra un ensemble de fonctionnalités de type système de fichiers que vous gérez avec l'ensemble d'outils Oracle.

Python utilise la bibliothèque DBM pour créer des structures de stockage sur disque très sophistiquées.

CouchDB et Mongo (et d'autres) sont des structures de stockage très sophistiquées qui offrent des fonctionnalités de type base de données.

Le fait est que le système d'exploitation doit faire le minimum et que tout est un module complémentaire.

S.Lott
la source
4
Tout à fait d'accord. En fait, une grande partie de ce qu'OP demandait est présente dans le projet WinFS, mort ou mourant: en.wikipedia.org/wiki/WinFS . Autant que le geek en dit, «Neat! l'utilisateur expérimenté et ingénieur logiciel en moi dit: "Essayer trop fort!"
Adam Crossland
6
"Le fait est que le système d'exploitation doit faire le minimum et que tout est un module complémentaire." Une affirmation assez audacieuse à une époque où certains systèmes d'exploitation contiennent un système de fenêtrage intégré, un service d'indexation de fichiers, un lecteur multimédia, un bureau distant, un pare-feu ou Netris.
biziclop
1
@biziclop: D'accord. Windows a divergé du point de vue Linux. Rien de surprenant là-bas.
S.Lott
1
@ S.Lott Ne vous méprenez pas, je suis d'accord avec votre approche, mais Windows regorge de tant de déchets inutiles de toute façon, une fonctionnalité supplémentaire ne fera pas de différence. :)
biziclop
4
Telle est la philosophie Unix. Ce n'est pas nécessairement juste. Il (et un C conforme) facilite le portage d'Unix sur le matériel. Cela permet également aux gens de cloner Unix dans les saveurs de goûts -ix que nous trouvons aujourd'hui. Si une fonctionnalité est utile et que tous les programmes en ont besoin, comme, par exemple, les champs de saisie vérifiés par l'orthographe, il est utile que l'environnement d'exécution la fournisse. Nous n'avons pas besoin de 400 versions indépendantes d'une barre de ruban.
Tim Williscroft
8

La réponse courte est: les gens ordinaires comprennent le système de fichiers. Cela leur rappelle un classeur. Pensez aux pages Web et même aux applications Fat, pourquoi pensez-vous qu'elles Tabssont si populaires? Les gens peuvent s'identifier à eux et les comprendre rapidement.

Imagerie essayant d'apprendre à grand-mère à rechercher une base de données pour un fichier en fonction des balises de propriété. Avec le système de fichiers, grand - mère sait que le fichier est simplement là où elle l'a mis .

Même avec WinFS, je ne pense pas que MS allait se débarrasser de l'apparence du système de fichiers.

Crétins
la source
9
Je dois être en désaccord avec cela. La plupart des gens qui ne sont pas obligés de naviguer dans le système de fichiers ne le font pas. Ils ouvrent un traitement de texte et cliquent sur leur document récent, ou recherchent dans le menu de démarrage de Windows 7, etc. Et beaucoup de gens ne savent pas où ils ont placé leurs fichiers. Il serait beaucoup plus facile pour grand-mère de rechercher des "recettes de cookies" ou des "photos de petit-fils" ou autre chose que de maintenir une hiérarchie de dossiers.
Matthew Read
16
Cela pourrait être un choc pour vous: les gens ordinaires ne comprennent pas le système de fichiers. Ils n'ont pas la moindre idée. Et je ne parle pas d'un FS de style Unix avec ses points de montage, ses liens symboliques et ses liens durs, mais d'une structure de répertoires standard avec des fichiers.
biziclop
2
@Morons, ma grand-mère ne sait jamais où elle met les choses. Gmail a déjà déplacé mon paradigme souhaité vers un système de balisage, en particulier avec des filtres pour baliser automatiquement les choses. Je pense que le paradigme du système de fichiers a été mis en œuvre en grande partie grâce à la simplicité de la programmation des arborescences. Il facilite également l'adressage du point de vue de la programmation. Comment spécifieriez-vous l'emplacement d'un document dans un système basé sur des balises? Cela ne veut pas dire que cela ne peut pas être fait, mais les détails doivent être aplanis.
zzzzBov
3
Achetez-vous vos classeurs remplis de milliers de dossiers et documents nécessaires au fonctionnement de l'armoire elle-même, que vous devez parcourir et contourner, mais attention à ne pas toucher? Votre classeur semble-t-il s'ouvrir à un emplacement différent chaque fois que vous sortez le tiroir? Etc. etc. Je suis d'accord avec Matthew et biziclop - les gens "ordinaires" ne comprennent pas .
Nicole
2
J'ai un diplôme CS. Mais je ne sais pas dans quels dossiers n'importe quel Windows place quels fichiers. Surtout Desktop, StartMenu, QuickLaunch et tous les autres dossiers par défaut spécifiques à l'utilisateur / au système. (Ce système M $ -Help ne m'aide pas à m'expliquer comment appuyer sur un bouton.) J'ai besoin d'installer CygWin pour pouvoir rechercher mes propres fichiers, car les nouvelles fonctionnalités de recherche M $ ne trouvent plus de fichiers existants simples comme sur win2k. Désactiver les erreurs telles que masquer les fichiers système, masquer les extensions de fichiers ne résout plus la plupart des problèmes. J'ai abandonné Windows, quand j'ai été forcé de travailler sur le (tout nouveau) winXP.
comonad
6

Il y a un peu de vérité dans chaque réponse, mais je ne pense pas que ce soit toute la vérité.

Ce que vous listez sont principalement des fonctionnalités qui sont cruellement manquées chaque jour par les utilisateurs et les développeurs.

Les gens ne comprennent pas plus le système de fichiers basé sur l'arborescence qu'ils ne comprendraient un système basé sur DAG.

Et il n'y a absolument aucune excuse pour les appendices pathétiques des noms de fichiers appelés extensions. Ils sont non seulement totalement inadaptés à leur finalité (identification du type de fichier) mais aussi une source de nuisance infinie pour les utilisateurs.

La raison pour laquelle nous les utilisons toujours est un mélange d'une attitude "qui fera l'affaire" et du réel besoin de maintenir la compatibilité avec le code plus ancien. Une nouvelle approche du stockage des fichiers signifierait un changement radical dans l'API d'E / S de fichiers de base, rendant la plupart des codes existants inutiles. Soit cela, soit vous devez les mettre sur la pointe des pieds, en conservant l'ancienne API. N'oubliez pas PROGRA ~ 1.

Je pense que pour les raisons ci-dessus, bien que l'avenir puisse contenir des systèmes de fichiers plus spécialisés pour des applications spéciales, mais bien que les architectures de PC de bureau et portables d'aujourd'hui survivent, nous sommes coincés avec le système de fichiers en grande partie arborescent avec son manque de métadonnées et ses horribles petites extensions.


Maintenant, je vais changer de camp.

Parce que tout est autour de nous, nous n'apprécions jamais vraiment à quel point la métaphore de l'arbre est époustouflante. Sur mon disque dur, j'ai plusieurs centaines de milliers de fichiers. Si je dois en trouver un, cela prend rarement plus d'une minute, même si je connais très peu le dossier. Imaginez maintenant la même tâche sans aucune structure, juste une liste plate de noms, défilant sans fin.

Pourtant, toutes les opérations sont simples, il n'y a aucune action effrayante à distance, rien qui me ferait aller wtf.

En fait, j'ai implémenté une fois un magasin de documents avec des métadonnées riches et une hiérarchie basée sur DAG. (Ce n'était même pas un DAG de forme libre, c'était strictement une métastructure à deux niveaux et les documents, qui pouvaient être des enfants d'une collection de niveau 1 ou de niveau 2. Donc c'est vraiment simple.)

De toute évidence, l'exigence selon laquelle les noms des documents doivent être uniques dans une collection doit rester.

Et puis les problèmes ont commencé à couler. Que se passe-t-il si vous ouvrez une collection et changez le nom du document en quelque chose qui se heurte dans une autre collection à laquelle le document appartient également? Nous avons affiché un message d'erreur mais les utilisateurs étaient complètement déconcertés. (Ce sont les mêmes utilisateurs qui avaient demandé cette exigence.)

Ils ont essayé de supprimer un document, mais tout ce qu'il a fait a été de le retirer de la collection. Il apparaît donc toujours dans les résultats de recherche. Nous l'avons également essayé dans l'autre sens, mais ils se plaignaient ensuite d'avoir supprimé un document de la collection A et qu'il avait disparu comme par magie de la collection B. Nous avions donc besoin à la fois d'une opération de «dissociation» et d'une suppression matérielle.

Finalement, nous avons concédé la défaite, heureusement encore à temps.

Les facettes de recherche supplémentaires rendues possibles par les métadonnées ont cependant été un régal absolu.

biziclop
la source
Rappelez-vous CP / M sur un disque dur de 5 Mo? Des centaines et des centaines de fichiers défilent. TERRIBLE!
quick_now
@quickly_now Ah, le bon vieux CP / M. :)
biziclop
3

Pour être honnête, je touche à peine les métadonnées de mes fichiers sur Mac. Je pense qu'au cours des 5 dernières années d'utilisation d'OSX (qui prend en charge les commentaires, etc.), j'ai utilisé des métadonnées sur peut-être 2 fichiers. Ne dis pas que c'est une mauvaise idée.

Je ne sais tout simplement pas comment les frais généraux de marquage sont pragmatiques pour moi.

Je pense que la plus belle fonctionnalité de système de fichiers que je connaisse serait un système de version au niveau du système de fichiers ... qui fonctionne entre les partitions. Cela a été fait sur VAXen dans les années 70 et au début des années 80, je ne sais pas pourquoi cela n'a pas fonctionné avec Unix et NTFS / Windows.

Paul Nathan
la source
Les versions modernes de NTFS / Windows font versioning offre. Ce n'est pas exactement en face de vous, mais cela existe. Je ne peux pas dire comment il se compare au VMS.
Shog9
2

J'ai travaillé avec des systèmes de fichiers non hiérarchiques sur des minis plus anciens comme HP3000 et Encore / Gould. Vous n'aviez pas de répertoires; vous aviez un groupe et un compte, et les fichiers étaient nommés " groupe . compte . fichier ", comme "users.jbode.myfile1", "dev.jbode.main", etc.

Maintenant, ce sont d' anciens systèmes, où les quotas d'espace disque individuels étaient dans le seul mégaoctet, donc ce n'est pas comme si vous aviez besoin de trop de niveaux pour organiser vos trucs, mais du point de vue d'un utilisateur et d'un programmeur, les systèmes hiérarchiques sont beaucoup plus agréables.

John Bode
la source
1

Je ne vois pas où (au moins certains) les systèmes de fichiers actuels ont vraiment besoin de faire beaucoup [Edit: n'importe quoi, pour être honnête] pour supporter les balises. Lorsque vous y arrivez, la prise en charge des balises signifie un peu plus que certaines données supplémentaires associées à un fichier, mais n'est pas écrite dans le flux d'octets de ce fichier.

NTFS (pour choisir un exemple qui est largement utilisé) peut très bien le faire: en ce qui concerne NTFS, un fichier n'est pas nécessairement un seul flux d'octets. Sur NTFS, vous pouvez associer un nombre arbitraire de flux de données à un seul nom de fichier. Chaque fichier a un "flux primaire" (éventuellement vide) qui n'a pas de nom. Cependant, il peut également avoir un nombre arbitraire d'autres flux, dont chacun doit avoir un nom. En utilisant cela, il serait vraiment trivial d'ajouter un flux nommé (juste par exemple) "balises" à un fichier existant, et (évidemment assez) d'écrire vos balises dans ce flux.

Après cela vient la partie un peu plus difficile: obtenir vos outils pour utiliser les balises que vous y mettez. Idéalement, vous voudriez probablement les indexer pour une recherche rapide, donc vous pourriez faire des choses comme créer un "répertoire virtuel" de tous les fichiers avec une balise spécifique.

Au moins de mon point de vue, le système de fichiers a déjà ce qu'il faut - il est censé stocker et récupérer les données, et il peut parfaitement le faire en ce moment. L'utilisation de ces données est le travail d'autres outils. Ces outils n'existent pas actuellement, mais l'infrastructure du système de fichiers pour les prendre en charge existe.

Si je suis autorisé à être cynique pendant un moment, je dirais qu'il était inévitable que cette fonctionnalité de NTFS resterait presque complètement ignorée et inconnue. Après tout, il est simple à utiliser et ne nécessite aucune API spéciale ni rien d'autre. Vous pouvez l'utiliser très bien en C, C ++ complètement portable ou tout autre élément qui vous permettra de spécifier un nom de fichier arbitraire. Voici un petit bout de code pour illustrer la création d'un fichier avec un AFS:

#include <fstream>

int main() {
    std::ofstream out("test.txt");
    std::ofstream tag("test.txt:tags");

    out << "This is the output file";
    tag << "tag1 tag2";

    return 0;
}

Et, voici du code pour lire et afficher les balises:

#include <fstream>
#include <iterator>
#include <iostream>
#include <string>

int main() { 
    std::ifstream tags("test.txt:tags");

    std::copy(std::istream_iterator<std::string>(tags),
          std::istream_iterator<std::string>(),
          std::ostream_iterator<std::string>(std::cout, " "));
    return 0;
}

Tout est très simple et facile. Notez que même si je n'y ai écrit qu'un petit peu de données, vous pouvez traiter un AFS comme n'importe quel autre fichier - tous les "trucs" habituels fonctionnent comme n'importe quoi d'autre. Dans un affichage de répertoire normal, tout ce qui apparaîtra est le flux principal (par exemple, la taille indiquée pour le fichier sera la taille du flux principal), mais si vous voulez le voir, il dir peut également afficher des informations sur les flux alternatifs avec le /Rdrapeau. Par exemple, une liste du fichier créé ci-dessus ressemble à ceci:

03/16/2011  08:22 PM                23 test.txt
                                     9 test.txt:tags:$DATA
               1 File(s)             23 bytes
Jerry Coffin
la source
1
DIR pourrait être en mesure de le montrer, mais la sauvegarde d'un fichier avec des flux alternatifs est horriblement difficile , en particulier sur un autre système. Par exemple, la plupart des lecteurs NAS utilisent aujourd'hui Linux, et les systèmes de fichiers ne gèrent pas du tout les flux alternatifs. Copiez le fichier ... et toutes les choses alt disparaissent.
quick_now
Oui, j'ai remarqué que la plupart des systèmes NAS sont plutôt ... mis au défi (et ce n'est pas le seul moyen non plus). Pour les types de sauvegarde et de restauration réels, cela ne pose cependant pas de problème (du moins si le logiciel en question est écrit avec compétence): BackupReadsérialisera tous les flux et BackupWritereconstituera le fichier (avec des flux alternatifs) à partir du format sérialisé.
Jerry Coffin
Cela dépend si vous souhaitez que les fichiers sauvegardés soient directement lisibles sur le NAS. Si vous le faites (et évitez le besoin de programmes de restauration spéciaux), vous êtes coincé avec des fichiers simples.
quick_now