Come siamo stati sellati dal filesystem (gerarchico) come struttura di dati di base?


19

Sono autodidatta e non ho una laurea CS. Più ho imparato a conoscere la struttura dei dati, più mi chiedo, al giorno d'oggi, come siamo ancora sellati dal filesystem, con directory e file, come struttura di archiviazione dei dati di base sul sistema operativo?

Capisco la semplicità, ma al giorno d'oggi sembra che ci potrebbero essere più opzioni disponibili in modo nativo. Per quanto ne so, l'unico progetto per migliorare la funzionalità di base del filesystem era ReiserFS, in cui si poteva dire quale riga di un file era stata modificata da chi e quando.

Ad esempio, se potessi avere una codifica nativa per i file, dove potrei etichettare immagini, diagrammi, documenti di elaborazione testi, un intero repository di codice, il tutto come appartenente a un singolo progetto, sarebbe davvero utile per me. Dato che sono bloccato nel paradigma del filesystem, so che potrei metterli tutti in una singola cartella / directory, ma cosa succede se esistono già in directory disparate e devono rimanere lì? So che ci sono programmi là fuori che possono farlo, ma perché non sono nel filesystem?

Qualcosa che sarebbe bello avere è una sorta di funzionalità relazionale nel filesystem, come si ottiene con RDBMS. Capisco che ciò avrebbe dovuto far parte di Vista / 7, ma che è caduto anche dall'elenco delle funzionalità.

Certo, qualsiasi programma può archiviare un file binario e avere qualsiasi struttura di dati in esso desiderata, perché il sistema operativo non potrebbe offrire modi più complessi di archiviazione dei dati, al di là della semplice gerarchia del filesystem?


2
Il nucleo dovrebbe essere semplice. Il gonfiamento opzionale che menzioni dovrebbe andare oltre un semplice nucleo. In alternativa, attendi due decenni e qualcuno reinventerà l'idea di un file system.
Giobbe

3
"E se esistessero già in diverse directory e dovessero rimanere lì?" A volte puoi usare hard-link per risolvere questo problema ...
FrustratedWithFormsDesigner

1
Inoltre, alcune interessanti letture sull'argomento: c2.com/cgi/wiki?FileSystemAlternatives
FrustratedWithFormsDesigner

3
Non proprio una soluzione in Windows 7, ma le nuove librerie in grado di dare alcune delle funzionalità ti sembra interessato a: lifehacker.com/#!5464350/...
DKnight

1
Se voglio mettere un file in due cartelle diverse contemporaneamente, inserisco un collegamento a quel file in una. Lo svantaggio è che se si sposta quella cartella / file, il collegamento non sarà valido.
Mateen Ulhaq,

Risposte:


17

Inizia con questo: http://en.wikipedia.org/wiki/Unix_File_System

Leggi questo: http://www.unix.org/what_is_unix/history_timeline.html

Quindi leggi questo: http://www.amazon.com/UNIX-Filesystems-Evolution-Design-Implementation/dp/0471164836

C'è una semplice risposta a "perché il sistema operativo non è in grado di offrire modi più complessi di archiviazione dei dati, oltre alla semplice gerarchia del filesystem?"

Perché è troppo per il sistema operativo.

Ecco a cosa servono le librerie e i pacchetti applicativi.

Oracle, ad esempio, ti venderà un set di funzionalità simili a file system che gestisci con il set di strumenti Oracle.

Python utilizza la libreria DBM per creare strutture di archiviazione su disco molto sofisticate.

CouchDB e Mongo (e altri) sono strutture di archiviazione molto sofisticate che offrono alcune funzionalità simili a database.

Il punto è che il sistema operativo dovrebbe fare il minimo e tutto è un componente aggiuntivo.


4
Abbastanza d'accordo. In realtà, molto di ciò che OP stava chiedendo è presente nel progetto WinFS morto o morente: en.wikipedia.org/wiki/WinFS . Per quanto il geek in, dice "pulito!" l'utente esperto e l'ingegnere del software in me dice "Provando troppo!"
Adam Crossland,

6
"Il punto è che il sistema operativo dovrebbe fare il minimo e tutto è un componente aggiuntivo." Piuttosto un'affermazione audace in un'epoca in cui alcuni sistemi operativi contengono un sistema di finestre integrato, un servizio di indicizzazione dei file, un lettore multimediale, un desktop remoto, un firewall o Netris.
biziclop,

1
@biziclop: concordato. Windows è divergente dal punto di vista di Linux. Niente di sorprendente lì.
S.Lott

1
@ S.Lott Non fraintendetemi, sono d'accordo con il vostro approccio, ma Windows è comunque sellato da così tanti rifiuti inutili, una funzionalità extra non farà la differenza. :)
biziclop,

4
Questa è la filosofia Unix. Non è necessariamente giusto. Fa (e un compositore C) rende Unix facile da portare su hardware. Rende anche abbastanza semplice per le persone clonare Unix nei gusti di -ix like che troviamo oggi. Se una funzione è utile e tutti i programmi ne hanno bisogno, come ad esempio i campi di input controllati per ortografia, allora è utile che l'ambiente di runtime lo fornisca. Non abbiamo bisogno di 400 versioni indipendenti di una barra multifunzione.
Tim Williscroft,

8

La risposta breve è: ogni giorno le persone capiscono il file system. Ricorda loro un file cabinet. Pensa alle pagine Web e persino alle app Fat, perché pensi che Tabssiano così popolari? Le persone possono identificarsi con loro e capirle rapidamente.

L'imaging sta cercando di insegnare alla nonna a cercare un DB per un file basato su tag di proprietà. Con il file system, la nonna sa che il file è semplicemente dove lo ha inserito .

Anche con WinFS non credo che MS si sarebbe sbarazzata dell'aspetto del file system.


9
Non sono d'accordo con questo. La maggior parte delle persone che non sono costrette a navigare nel filesystem non lo fanno. Aprono un elaboratore di testi e fanno clic sul loro documento recente o cercano nel menu di avvio di Windows 7, ecc. E molte persone perdono traccia di dove hanno messo i loro file. Sarebbe molto più facile per la nonna cercare "ricette di biscotti" o "foto di nipoti" o qualunque cosa piuttosto che mantenere una gerarchia di cartelle.
Matteo Leggi il

16
Questo potrebbe essere uno shock per te: la gente comune non capisce il file system. Non hanno le idee più deboli. E non intendo un FS in stile Unix con i suoi punti di montaggio, collegamenti simbolici e hardlink, ma una struttura di directory standard palustre con file al suo interno.
biziclop,

2
@Morons, mia nonna non sa mai dove mette le cose. Gmail ha già spostato il mio paradigma desiderato in un sistema di tagging, in particolare con filtri per taggare automaticamente le cose. Penso che il paradigma del filesystem sia stato implementato in gran parte grazie alla semplicità di programmazione delle strutture ad albero. Inoltre semplifica l'indirizzamento dal punto di vista della programmazione. Come specificheresti la posizione di un documento in un sistema basato su tag? Non dire che non si può fare, ma i dettagli devono essere appianati.
zzzzBov

3
Acquistate i vostri archivi di file pieni di migliaia di cartelle e documenti necessari per il funzionamento dell'armadio stesso, che è necessario navigare all'interno e intorno ma fare attenzione a non toccare? Il tuo schedario sembra aprirsi in una posizione diversa ogni volta che tiri fuori il cassetto? Ecc. Ecc. Sono d'accordo con Matthew e biziclop: la gente di "tutti i giorni" non capisce .
Nicole,

2
Ho una laurea in CS. Ma non so in quali cartelle qualsiasi Windows inserisca i file. Soprattutto desktop, StartMenu, QuickLaunch e tutte le altre cartelle predefinite specifiche dell'utente / del sistema. (Quel sistema M $-Help non aiuta a spiegarmi come premere un pulsante.) Devo installare CygWin per poter cercare i miei file, perché le nuove funzionalità di ricerca M $ non trovano più semplici file esistenti come su win2k. Disabilitare i malfunzionamenti come hide-system-files, hide-file-extensions non risolve più la maggior parte dei problemi. Ho rinunciato a Windows, quando sono stato costretto a lavorare sul (nuovissimo) winXP.
comonad

6

C'è una piccola verità in ogni risposta qui, ma non penso che sia tutta la verità.

Ciò che elenchi sono per lo più caratteristiche che ogni giorno gli utenti e gli sviluppatori sono molto persi.

Le persone non capiscono il file system basato su alberi più di quanto non capiscano uno basato su DAG.

E non ci sono assolutamente scuse per le patetiche appendici dei nomi dei file chiamati estensioni. Non sono solo del tutto inadatti al loro scopo (identificare il tipo di file) ma sono anche una fonte infinita di fastidio per gli utenti.

Il motivo per cui li stiamo ancora usando è un mix di un atteggiamento "che farà" e la reale necessità di mantenere la compatibilità con il codice precedente. Un nuovo approccio alla memorizzazione dei file significherebbe un cambiamento radicale nell'API I / O dei file di base, rendendo inutile la maggior parte del codice esistente. O quello o devi camminare in punta di piedi attorno a loro, mantenendo l'API legacy. Ricorda PROGRA ~ 1.

Penso per i motivi di cui sopra, anche se il futuro potrebbe contenere file system più specializzati per applicazioni speciali, ma mentre le architetture di PC desktop e laptop del presente sopravvivono, siamo bloccati con il file system in gran parte basato su alberi con la sua mancanza di metadati e le sue orribili piccole estensioni.


Adesso cambierò lato.

Perché è tutto intorno a noi, non apprezziamo mai davvero quanto sia incredibilmente potente la metafora dell'albero. Sul mio disco rigido ho diverse centinaia di migliaia di file. Se devo trovarne uno, raramente ci vuole più di un minuto, anche se so molto poco del file. Ora immagina lo stesso compito senza alcuna struttura, solo un elenco piatto di nomi, che scorre all'infinito.

Eppure tutte le operazioni sono semplici, non c'è azione spettrale a distanza, niente che mi faccia andare avanti.

In realtà, una volta ho implementato un archivio documenti con metadati avanzati e una gerarchia basata su DAG. (Non era nemmeno un DAG in formato libero, era rigorosamente una metastruttura a due livelli e i documenti, che potevano essere figli di una raccolta di livello 1 o di livello 2. Quindi è davvero semplice.)

Ovviamente, il requisito secondo cui i nomi dei documenti dovrebbero essere univoci all'interno di una raccolta doveva rimanere.

E poi i problemi hanno iniziato a fluire. Cosa succede se si apre una raccolta e si modifica il nome del documento in qualcosa che si scontra in una raccolta diversa a cui appartiene anche il documento? Abbiamo visualizzato un messaggio di errore ma gli utenti erano completamente sconcertati. (Questi sono gli stessi utenti che avevano richiesto questo requisito.)

Hanno provato a eliminare un documento, ma tutto ciò che è stato è stato rimuoverlo dalla raccolta. Quindi è ancora apparso nei risultati di ricerca. Abbiamo provato anche il contrario, ma poi si sono lamentati del fatto che hanno eliminato un documento dalla raccolta A e che è magicamente scomparso dalla raccolta B. Quindi avevamo bisogno sia di un "scollegamento" che di un'operazione di eliminazione definitiva.

Alla fine abbiamo ammesso la sconfitta, fortunatamente ancora in tempo.

Le sfaccettature di ricerca extra rese possibili dai metadati hanno funzionato in modo assoluto.


Ricordi CP / M su un disco rigido da 5 MB? Centinaia e centinaia di file scorrevano oltre. TERRIBILE!
quick_now

@quickly_now Ah, il buon vecchio CP / M. :)
biziclop

3

Ad essere sincero, tocco a malapena i metadati sui miei file sul Mac. Penso che negli ultimi 5 anni di utilizzo di OSX (che supporta i commenti e così via), ho usato i metadati su forse 2 file. Non dire che è una cattiva idea.

Non sono sicuro di come il sovraccarico dell'etichettatura sia pragmatico per me.

Penso che la più bella caratteristica del filesystem che conosco sarebbe un sistema di versioning a livello di filesystem ... che funziona su più partizioni. È stato fatto su VAXen negli anni '70 e nei primi anni '80, non so perché non ha funzionato con Unix e NTFS / Windows.


Le versioni moderne di NTFS / Windows fanno offerta delle versioni. Non è esattamente nella tua faccia, ma esiste. Non posso dire come si confronta con VMS però.
Shog9

2

Ho lavorato con file system non gerarchici su minis più vecchi come HP3000 ed Encore / Gould. Non avevi directory; avevi un gruppo e un account e i file venivano denominati " gruppo . account . file ", come "users.jbode.myfile1", "dev.jbode.main", ecc.

Ora, questi sono vecchi sistemi, in cui le singole quote di spazio su disco erano nei singoli megabyte, quindi non è come se avessi bisogno di troppi livelli per organizzare le tue cose, ma dal punto di vista dei sistemi gerarchici dell'utente e del programmatore sono molto più carini.


1

Non vedo dove (almeno alcuni) i file system attuali debbano davvero fare molto [Modifica: qualsiasi cosa, a dire il vero] per supportare i tag. Quando ci si arriva, i tag di supporto significano poco più di alcuni dati extra associati a un file, ma non vengono scritti nel flusso di byte per quel file.

NTFS (per scegliere un esempio ampiamente utilizzato) può farlo bene: per quanto riguarda NTFS, un file non è necessariamente un singolo flusso di byte. Su NTFS è possibile associare un numero arbitrario di flussi di dati a un singolo nome di file. Ogni file ha un "flusso primario" (possibilmente vuoto) che non ha un nome. Tuttavia, può anche avere un numero arbitrario di altri flussi, ognuno dei quali deve avere un nome. Usando questo, sarebbe davvero banale aggiungere uno stream chiamato (solo per esempio) "tag" a un file esistente e (ovviamente abbastanza) scrivere i tuoi tag su quello stream.

Dopodiché arriva la parte un po 'più difficile: ottenere i tuoi strumenti per utilizzare i tag che metti lì. Idealmente, probabilmente dovresti indicizzarli per una ricerca veloce, quindi potresti fare cose come creare una "directory virtuale" di tutti i file con un tag specifico.

Almeno dal mio punto di vista, il file system ha già ciò che è necessario: dovrebbe archiviare e recuperare i dati, e può farlo perfettamente bene in questo momento. Fare uso di quei dati è il lavoro di altri strumenti. Tali strumenti attualmente non esistono, ma l'infrastruttura del file system che li supporta.

Se potessi essere cinico per un momento, direi che era inevitabile che questa funzionalità di NTFS rimanesse quasi completamente ignorata e sconosciuta. Dopotutto, è semplice da usare e non richiede alcuna API speciale o altro. Puoi usarlo abbastanza bene in C, C ++ completamente portatile o qualsiasi altra cosa che ti permetta di specificare un nome di file arbitrario. Ecco un breve codice per dimostrare la creazione di un file con 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;
}

Ed ecco un codice per leggere e visualizzare i tag:

#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;
}

Tutto molto semplice e facile. Nota che anche se ho scritto solo un po 'di dati banali lì, puoi trattare un AFS proprio come qualsiasi altro file - tutte le solite "cose" funzionano esattamente come con qualsiasi altra cosa. In una normale visualizzazione della directory, tutto ciò che verrà visualizzato è il flusso principale (ad es., La dimensione mostrata per il file sarà la dimensione del flusso primario), ma se vuoi vederlo, dir puoi mostrare anche informazioni su flussi alternativi con la /Rbandiera. Ad esempio, un elenco per il file creato sopra è simile al seguente:

03/16/2011  08:22 PM                23 test.txt
                                     9 test.txt:tags:$DATA
               1 File(s)             23 bytes

1
DIR potrebbe essere in grado di mostrarlo, ma il backup di un file con flussi alternativi è orribilmente difficile , specialmente su qualche altro sistema. Ad esempio, la maggior parte delle unità NAS oggi utilizza Linux e i file system non gestiscono affatto flussi alternativi. Copia il file su ... e tutto il resto scompare.
quick_now

Sì, ho notato che la maggior parte dei sistemi NAS sono piuttosto ... sfidati (e neanche questo è l'unico modo). Per il backup e il ripristino di cose reali, ciò non causa problemi (almeno se il software in questione è stato scritto con competenza): BackupReadserializzerà tutti i flussi e BackupWritericostituirà il file (con flussi alternativi) dal formato serializzato.
Jerry Coffin,

Dipende se si desidera che i file di backup siano leggibili direttamente sul NAS. Se lo fai (ed eviti la necessità di speciali programmi di ripristino), allora sei bloccato con file semplici.
quick_now
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.