1 votes

Un système de fichiers "inversé" ?

Dans le suivi d'une question I demandé sur StackOverflow existe-t-il des systèmes de fichiers dans lesquels les données sont écrites "de bout en bout" ou "de bas en haut", plutôt que de haut en bas ?

Plus précisément, je suis à la recherche d'un moyen (peut-être spécialement conçu) de stocker les fichiers journaux sous la forme la plus récente en premier ( a la comment les blogs et les sites d'information sont organisés, avec les plus récents en haut).

Une telle bête existe-t-elle ? Si oui, qu'est-ce qu'elle est et où peut-on la trouver ?

3voto

Ce que vous demandez n'est pas seulement un système de fichiers "inversé". Vous voulez un dossier structuré Un système de fichiers "inversé", c'est-à-dire un système de fichiers d'enregistrements où l'enregistrement ajouté en dernier apparaît en premier dans le fichier. En fait, l'aspect inversé serait probablement implémenté comme "vous pouvez insérer un enregistrement avant le premier enregistrement existant".

Les interfaces de systèmes de fichiers que l'on trouve dans les systèmes d'exploitation typiques des PC (Unix, Windows, et même des systèmes plus exotiques) sont uniquement structurées en octets - elles n'ont aucune notion d'enregistrement. Vous n'avez donc pas de chance.

Une approche possible serait de faire de chaque entrée du journal un fichier séparé dans le répertoire. Puis de parcourir le répertoire dans l'ordre inverse de l'heure de création du fichier, ou dans l'ordre inverse des noms si vous donnez des noms monotones aux entrées du journal. Puisque vous êtes susceptible d'avoir un grand nombre d'entrées de journal, assurez-vous d'utiliser un système de fichiers qui supporte bien les grands répertoires (par exemple, sous Linux, reiserfs et ext3 avec la fonction dir_index feature sont ok mais ext2 ne l'est pas), ou bien utiliser des sous-répertoires (un pour les 1000 premières entrées, un pour les 1000 suivantes et ainsi de suite).

Une autre approche consisterait à utiliser une base de données plus sophistiquée, par exemple une base que vous pouvez interroger en SQL, et à sélectionner les enregistrements dans l'ordre inverse de leur création ( SELECT message FROM logs ORDER BY date DESC ).

2voto

Bishal Ghimire Points 113

Je ne suis pas tout à fait sûr qu'il n'en existe pas, mais je n'en ai certainement jamais entendu parler. Si c'est possible, je pense qu'il y aurait des inconvénients majeurs.

L'ajout de données à un fichier nécessite généralement une copie complète des données existantes. Dans un système de fichiers, on peut le gérer en ajoutant un bloc au début du fichier, mais cela pose tout de même quelques problèmes mineurs. Les blocs avec de l'espace libre devraient conserver l'espace libre au début, ce qui nécessiterait très probablement une recherche supplémentaire par le lecteur pour trouver l'emplacement approprié.

La gestion de l'espace libre sur le disque, lorsque l'on travaille à rebours, deviendrait un véritable casse-tête. Cela contredirait la plupart des techniques de programmation, puisqu'il faudrait trouver l'indice maximum et ensuite travailler en arrière à partir de là.

Je peux imaginer que cela ralentirait les gros fichiers, et que ce serait certainement une chose ridicule à programmer.

Au lieu de trouver un système de fichiers inversé, pourquoi ne pas simplement écrire le fichier comme d'habitude et l'analyser en sens inverse ? Élaborez un schéma de formatage de base des messages, lisez le fichier et analysez les messages à partir de celui-ci, puis affichez-les dans l'ordre chronologique. Si vous n'avez besoin que des derniers messages, allez jusqu'à la fin du fichier, puis revenez en arrière n messages. Le résultat serait similaire, mais avec beaucoup moins de travail et des performances comparables, voire meilleures.

1voto

Damian Powell Points 315

Vous devez séparer les idées de stockage y récupération . Même dans les blogs que vous mentionnez, les entrées sont probablement stocké dans un ordre chronologique avancé, mais affiché dans l'ordre chronologique inverse (sans tenir compte du fait que cela est facilité par l'utilisation du stockage structuré).

Il serait possible de créer un système de stockage structuré simpliste qui stockerait les entrées dans l'ordre connu, avec des "enregistrements" de forme libre et de longueur variable, avec des pointeurs à décalage d'octet stockés dans un fichier de ressources dans un format de longueur fixe (64 bits supporteraient des fichiers de plus de 18 millions de téraoctets). fichiers de plus de 18 millions de téraoctets). La recherche du dernier enregistrement ou du nth ou le last - n dans le fichier pointeur, puis l'octet vers lequel il pointe dans le fichier principal serait trivial et rapide. L'astuce qu'un système de fichiers ou un pilote spécial permettrait serait de rendre cette opération atomique et de rendre le fichier de ressources transparent.

0voto

Pylsa Points 29904

Vous êtes à la recherche de endiveté Quel est l'ordre des octets ? Pourquoi voudriez-vous que les fichiers journaux soient organisés au niveau du système de fichiers plutôt que de les classer dans l'ordre suivant, par exemple ls ?

S'il s'agit de l'Endianness, il existe plusieurs systèmes de fichiers.

0voto

Colas Nahaboo Points 141

Deux pensées me viennent à l'esprit :

Certains systèmes de contrôle de version stockent la première version du fichier contrôlé dans son intégralité et toutes les versions ultérieures comme des modifications, tandis que d'autres stockent la version actuelle du fichier contrôlé dans son intégralité et toutes les versions antérieures comme des modifications.

Si vous enregistrez les événements d'exécution dans une base de données plutôt que dans un fichier plat, vous ne saurez peut-être pas si la base de données stocke les événements de manière séquentielle, séquentielle inverse ou aléatoire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X