Temel veri yapısı olarak (hiyerarşik) dosya sistemiyle nasıl üzüldük?


19

Kendim öğrettim ve CS derecem yok. Veri yapısı hakkında ne kadar çok şey öğrendiysem, o gün ve yaşta, işletim sistemindeki temel veri depolama yapısı olarak dosya sistemi, dizinler ve dosyalar ile nasıl hala üzülüyoruz?

Basitliğini anlıyorum, ancak bugünlerde yerel olarak daha fazla seçenek olabilir gibi görünüyor. Bildiğim kadarıyla, dosya sisteminin temel işlevselliğini geliştiren tek proje, ReiserFS idi; burada bir dosyanın hangi satırının kim tarafından ve ne zaman değiştirildiğini söyleyebilirsiniz.

Örneğin, resimler için tek bir projeye ait olarak görüntüleri, diyagramları, kelime işlemci belgelerini, tüm kod deposunu etiketleyebileceğim dosyalar için yerel etiketlemem olsaydı, bu bana gerçekten yardımcı olurdu. Dosya sistemi paradigmasına takıldığım için, bunların hepsini tek bir klasöre / dizine koyabileceğimi biliyorum, ama farklı dizinlerde zaten mevcutlarsa ve orada kalmaları gerekiyorsa ne olacak? Bunu yapabilen programlar olduğunu biliyorum, ama neden dosya sisteminde değiller?

Sahip olmak güzel bir şey, dosya sisteminde RDBMS'lerle elde ettiğiniz gibi bir tür ilişkisel özelliktir. Bunun Vista / 7'nin bir parçası olması gerektiğini anlıyorum, ancak özellik listesinden de düştü.

Elbette, herhangi bir program bir ikili dosyayı saklayabilir ve içinde istediği herhangi bir veri yapısına sahip olabilir, neden işletim sistemi dosya sisteminin basit heirarşisinin ötesinde veri depolamanın daha karmaşık yollarını sunamıyordu?


2
Çekirdeği basit olmalı. Bahsettiğiniz isteğe bağlı şişkinlik basit bir çekirdeğin üzerine çıkmalıdır. Alternatif olarak, yirmi yıl bekleyin, birisi dosya sistemi kavramını yeniden keşfedecektir.
İş

3
"Ya zaten farklı dizinlerde mevcutlarsa ve orada kalmaları gerekiyorsa?" Bazen bu sorunu çözmek için sabit bağlantılar kullanabilirsiniz ...
FrustratedWithFormsDesigner

1
Ayrıca, konuyla ilgili bazı ilginç okumalar: c2.com/cgi/wiki?FileSystemAlternative
FrustratedWithFormsDesigner

3
Windows 7'de gerçekten bir çözüm değil, ancak yeni Kütüphaneler size ilginizi çeken işlevlerden bazılarını verebilir: lifehacker.com/#!5464350/…
DKnight

1
Bir dosyayı aynı anda iki farklı klasöre koymak istersem, bir dosyaya bir kısayol koyarım. Dezavantajı, bu klasörü / dosyayı yeniden konumlandırırsanız, kısayolun geçersiz olmasıdır.
Mateen Ulhaq

Yanıtlar:


17

Bununla başlayın: http://en.wikipedia.org/wiki/Unix_File_System

Bunu okuyun: http://www.unix.org/what_is_unix/history_timeline.html

Sonra bunu okuyun: http://www.amazon.com/UNIX-Filesystems-Evolution-Design-Implementation/dp/0471164836

"İşletim sistemi, veri sisteminin neden basit heirarşisinin ötesinde veri depolamanın daha karmaşık yollarını sunamıyordu?" Sorusunun basit bir cevabı var.

Çünkü işletim sisteminin yapması çok fazla.

Kitaplıklar ve uygulama paketleri bunun içindir.

Örneğin, Oracle size Oracle araç setiyle yönettiğiniz dosya sistemi benzeri özellikler kümesi satar.

Python, çok karmaşık disk üstü depolama yapıları oluşturmak için DBM kitaplığını kullanır.

CouchDB ve Mongo (ve diğerleri), bazı veritabanı benzeri özellikler sunan çok karmaşık depolama yapılarıdır.

Mesele şu ki, işletim sistemi en aza indirmeli ve her şey bir eklenti.


4
Oldukça katılıyorum. Aslında OP'nin istediği pek çok şey, ölü ya da ölmekte olan WinFS projesinde mevcut: en.wikipedia.org/wiki/WinFS . Geek'in söylediği kadar, 'Düzgün!' içimdeki deneyimli kullanıcı ve yazılım mühendisi "Çok zor deniyor!"
Adam Crossland

6
"Mesele şu ki, işletim sistemi minimum düzeyde olmalı ve her şey bir eklenti." Bazı işletim sistemlerinin yerleşik bir pencere sistemi, dosya dizinleme hizmeti, medya oynatıcı, uzak masaüstü, güvenlik duvarı veya Netris içerdiği çağda oldukça cesur bir ifade.
23'te biziclop

1
@biziclop: Kabul etti. Windows Linux bakış açısından ayrıldı. Orada şaşırtıcı bir şey yok.
S.Lott

1
@ S.Lott Beni yanlış anlamayın, yaklaşımınıza katılıyorum, ancak Windows yine de çok işe yaramaz çöple kaplandı, ekstra bir özellik bir fark yaratmayacak. :)
biziclop 16:11

4
Unix felsefesi budur. Mutlaka doğru değil. Bunu yapar (ve bir C complier) Unix'i donanıma taşımayı kolaylaştırır. Ayrıca, insanların bugün bulduğumuz -ix beğenilerinin lezzetlerine Unix'i klonlamasını yeterince kolaylaştırıyor. Bir özellik yararlıysa ve tüm programların buna (örneğin, yazım denetimi giriş alanlarına) ihtiyacı varsa, çalışma zamanı ortamının bunu sağlamasına değer vardır. Şerit çubuğun 400 bağımsız sürümüne ihtiyacımız yok.
Tim Williscroft

8

Kısa cevap: Sıradan insanlar dosya sistemini anlıyor. Onlara bir dosya dolabı hatırlatıyor. Web sayfalarını ve hatta Fat uygulamalarını düşünün, neden Tabsbu kadar popüler olduğunu düşünüyorsunuz ? İnsanlar onlarla özdeşleşebilir ve çabucak anlayabilir.

Görüntüleme Büyükanne'ye özellik etiketlerine dayalı bir DB Dosya aramayı öğretmeye çalışıyor .. Dosya sistemi ile Büyükanne dosyanın basitçe nereye koyduğunu biliyor .

WinFS ile bile MS'in dosya sisteminin görünümü ve hissinden kurtulacağını sanmıyorum.


9
Buna katılmıyorum. Dosya sisteminde gezinmek zorunda olmayan çoğu kişi bunu yapmaz. Bir kelime işlemciyi açarlar ve son belgelerini tıklatırlar veya Windows 7'nin başlat menüsünde vb. Arama yaparlar. Birçok kişi dosyalarını nereye koyduklarını izler. Büyükannenin "kurabiye tarifleri" veya "torun fotoğrafları" araması veya bir klasör hiyerarşisini korumaktan çok daha kolay olacaktır.
Matthew,

16
Bu sizin için bir şok olabilir: sıradan insanlar dosya sistemini anlamıyorlar. En küçük fikirlere sahip değiller. Bağlama noktaları, sembol bağlantıları ve hardlink'leri olan bir Unix tarzı FS demek değil, içinde dosyaları olan bir bataklık standart dizin yapısı.
26'da biziclop

2
@Morons, büyükannem bir şeyleri nereye koyduğunu asla bilemez. Gmail zaten istediğim paradigmamı, özellikle işleri otomatik olarak etiketlemek için filtrelerle, bir etiketleme sistemine kaydırdı. Dosya sistemi paradigması büyük ölçüde ağaç yapılarının programlanmasının basitliğinden dolayı uygulandığını düşünüyorum. Programlama açısından adreslemeyi kolaylaştırır. Etikete dayalı bir sistemde bir belgenin konumunu nasıl belirlersiniz? Yapamayacağını söylememek, ama detayların ütülenmesi gerekiyor.
zzzzBov

3
Dosya dolaplarınızı, dolabın kendisinin çalışması için gerekli olan binlerce klasör ve belgeyle dolu olarak satın alıyor musunuz? Çekmeceyi her çektiğinizde dosya dolabınız farklı bir konuma açılıyor gibi görünüyor mu? Vb. Matthew ve biziclop ile hemfikirim - "Her gün" insanlar anlamıyor .
Nicole

2
CS derecem var. Ancak herhangi bir Windows'un hangi klasörlere hangi dosyaları yerleştirdiğini bilmiyorum. Özellikle Masaüstü, StartMenu, QuickLaunch ve diğer tüm kullanıcı / sisteme özel varsayılan klasörler. (Bu M $ -Yardım sistemi bana bir düğmeye nasıl basacağımı açıklamamda yardımcı olmaz.) Daha yeni M $ arama özellikleri artık mevcut basit dosyaları bulamadığı için kendi dosyalarımı arayabilmek için CygWin'i yüklemem gerekiyor. win2k. Hide-system-files, hide-file-extensions gibi yanlış özellikleri devre dışı bırakmak artık çoğu sorunu çözmüyor. WinXP'de (yepyeni) çalışmaya zorlandığımda Windows'tan vazgeçtim.
Comonad

6

Buradaki her cevapta küçük bir gerçek var ama bunun gerçek olduğunu sanmıyorum.

Listeledikleriniz çoğunlukla kullanıcılar ve geliştiriciler tarafından her gün kaçırılan özelliklerdir.

İnsanlar ağaç tabanlı dosya sistemini DAG tabanlı bir sistemden daha fazla anlamıyorlar.

Ve uzantılar adı verilen dosya adlarının acıklı uzantıları için kesinlikle hiçbir bahane yoktur. Yalnızca amaçlarına tamamen uygun değil (dosya türünü belirleme) değil, aynı zamanda kullanıcılar için sonsuz bir sıkıntı kaynağı.

Onları hala kullanmamızın nedeni, "yapacak" bir tutumun ve eski kodla uyumluluğu sürdürmenin gerçek gereksiniminin bir karışımıdır. Dosyaları saklamak için yeni bir yaklaşım, temel dosya I / O API'sinde köklü bir değişiklik anlamına gelir ve mevcut kodun çoğunu işe yaramaz hale getirir. Ya bu ya da eski API'yı koruyarak etraflarına bahşiş vermelisiniz. PROGRA ~ 1'i hatırlayın.

Bence yukarıdaki nedenlerden dolayı, gelecekteki özel uygulamalar için daha özel dosya sistemleri barındırabilse de, şu anki masaüstü ve dizüstü bilgisayar mimarileri hayatta kalırken, meta veri eksikliği ve korkunç küçük uzantıları.


Şimdi taraf değiştireceğim.

Çevremizde olduğundan, ağaç metaforunun ne kadar akıl almaz derecede güçlü olduğunu asla takdir etmiyoruz. Sabit diskimde birkaç yüz bin dosya var. Birini bulmam gerekiyorsa, dosya hakkında çok az şey bilsem bile, nadiren bir dakikadan fazla sürer. Şimdi aynı görevi herhangi bir yapı olmadan hayal edin, sadece düz bir isim listesi, sonsuzca kaydırın.

Yine de tüm operasyonlar basittir, uzaktan ürkütücü bir eylem yoktur, beni wtf'ye götürecek hiçbir şey yoktur.

Aslında, zengin meta veriler ve bir DAG tabanlı hiyerarşi içeren bir belge deposu uyguladım. (Serbest biçimli bir DAG bile değildi, kesinlikle iki seviyeli bir metayapı ve seviye 1 veya seviye 2 koleksiyonunun çocukları olabilecek belgelerdi. Yani gerçekten basit.)

Açıkçası, bir koleksiyon içinde belge adlarının benzersiz olması şartı kalmak zorundaydı.

Ve sonra sorunlar akmaya başladı. Bir koleksiyonu açar ve dokümanın adını dokümanın ait olduğu farklı bir koleksiyonda çakışan bir adla değiştirirseniz ne olur? Bir hata mesajı görüntüledik, ancak kullanıcılar tamamen şaşırdı. (Bunlar, bu gereksinimi isteyen kullanıcılarla aynıdır.)

Bir dokümanı silmeye çalıştılar, ancak tüm bunlar koleksiyondan kaldırıldı. Bu yüzden hala arama sonuçlarında ortaya çıktı. Bunu başka bir şekilde denedik, ancak daha sonra A belgesinden bir belgeyi sildiklerinden ve B koleksiyonundan sihirli bir şekilde kaybolduklarından şikayet ediyorlardı. Bu yüzden hem bir "bağlantıyı kesme" hem de bir sert silme işlemine ihtiyacımız vardı.

Sonunda yenilgiyi kabul ettik, neyse ki hala zamanında.

Meta verilerin mümkün kıldığı ekstra arama özellikleri, mutlak bir muamele yaptı.


5 MB sabit diskte Rememebr CP / M? Yüzlerce ve yüzlerce dosya ilerliyor. KORKUNÇ!
quickly_now

@quickly_now Ah, iyi eski CP / M. :)
biziclop

3

Dürüst olmak gerekirse, Mac'teki dosyalarımdaki meta verilere zar zor dokunuyorum. Sanırım son 5 yıl içinde OSX (yorumları destekleyen vb.) Kullanarak, belki 2 dosyada meta veri kullandım. Kötü bir fikir olduğunu söylemiyorum.

Etiketleme yükünün benim için nasıl pragmatik olduğundan emin değilim.

Ben biliyorum en güzel dosya sistemi özelliği çapraz bölümleri çalışan bir dosya sistemi seviyesi sürümleme sistemi olacağını düşünüyorum. 70'lerde ve 80'lerin başında VAXen'de yapıldı, neden Unix ve NTFS / Windows ile yakalanmadığından emin değil.


NTFS / Windows'un Modern sürümleri yapmak teklif sürüm. Tam olarak yüzünüzde değil, ama var. Yine de VMS ile nasıl karşılaştırılacağını söyleyemeyiz.
Şok9

2

HP3000 ve Encore / Gould gibi eski minislerde hiyerarşik olmayan dosya sistemleriyle çalıştım. Dizinleriniz yoktu; bir grubunuz ve hesabınız vardı ve dosyalar "users.jbode.myfile1", "dev.jbode.main" vb . gibi " grup . hesap . dosyası " olarak adlandırıldı .

Şimdi, bunlar tek tek disk alanı kotalarının tek megabaytta olduğu eski sistemler , bu yüzden öğelerinizi düzenlemek için çok fazla seviyeye ihtiyacınız yok gibi değil, bir kullanıcının ve programcının bakış açısından hiyerarşik sistemleri çok daha hoş.


1

Geçerli (en azından bazı) dosya sistemlerinin etiketleri desteklemek için gerçekten çok fazla [Düzen: herhangi bir şey, dürüst olmak gerekirse] yapması gerektiğini görmüyorum. İndirdiğinizde, etiketleri desteklemek , bir dosyayla ilişkili bazı ekstra verilerden biraz daha fazlası anlamına gelir , ancak bu dosya için bayt akışına yazılmaz .

NTFS ( geniş kullanımda olan bir örnek seçmek için) bunu iyi yapabilir: NTFS'nin umduğu kadarıyla, bir dosya mutlaka tek bir bayt akışı değildir. NTFS'de, rastgele sayıda veri akışını tek bir dosya adıyla ilişkilendirebilirsiniz. Her dosyada adı olmayan (muhtemelen boş) bir "birincil akış" vardır. Bununla birlikte, her birinin bir adı olması gereken rasgele sayıda başka akışa da sahip olabilir. Bu kullanarak, gerçekten olurdu önemsiz varolan dosyaya (sadece örneğin) adlı akışı "etiketleri" eklemek ve (bariz bir şekilde) bu akışta etiketleri yazmak.

Bundan sonra biraz daha zor bir bölüm geliyor: araçlarınızı oraya koyduğunuz etiketleri kullanmak için kullanmak İdeal olarak, muhtemelen hızlı arama için dizine eklemek istersiniz, bu nedenle belirli bir etikete sahip tüm dosyaların "sanal dizini" oluşturmak gibi şeyler yapabilirsiniz.

En azından benim bakış açımdan, dosya sistemi zaten gerekli olan şeylere sahip - verileri depolamak ve almak gerekiyor ve bunu şimdi mükemmel bir şekilde yapabilir. Bu verileri kullanmak diğer araçların görevidir. Bu araçlar şu anda mevcut değil, ancak bunları destekleyen dosya sistemi altyapısı var.

Bir an için alaycı olmama izin verilirse, NTFS'nin bu özelliğinin neredeyse tamamen göz ardı edilip bilinmeyeceğinin kaçınılmaz olduğunu söyleyebilirim. Sonuçta, kullanımı basittir ve herhangi bir özel API veya başka bir şey gerektirmez. Tamamen taşınabilir C, C ++ veya rasgele bir dosya adı belirtmenize izin verecek herhangi bir şeyde oldukça güzel kullanabilirsiniz. İşte AFS ile dosya oluşturmayı göstermek için hızlı bir kod:

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

Ve burada etiketleri okumak ve görüntülemek için bazı kodlar:

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

Hepsi çok basit ve kolay. Orada sadece önemsiz bir veri yazmış olmama rağmen, AFS'yi başka herhangi bir dosya gibi ele alabilirsiniz - her zamanki "şeyler" tıpkı diğer her şey gibi çalışır. Normal bir dizin sergileyen görünecektir hepsi birincil akım (örneğin, dosya için gösterilen boyut birincil akımının büyüklüğünde olacak) 'dir, ancak bunu görmek istiyorsanız, dir yapabilirsiniz alternatif akış hakkında bilgi göstermek yanı ile /Rbayrak. Örneğin, yukarıda oluşturulan dosya için bir liste şöyle görünür:

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

1
DIR bunu gösterebilir, ancak alternatif akışlara sahip bir dosyanın yedeklenmesi , özellikle diğer bazı sistemlere korkunç derecede zordur . Örneğin, günümüzde çoğu NAS sürücüsü Linux kullanıyor ve oradaki dosya sistemleri alternatif akışları hiç işlemiyor. Dosyayı kopyala ... ve tüm alt şeyler kaybolur.
Hızlı bir şekilde

Evet, çoğu NAS sisteminin oldukça ... zorlandığını fark ettim (ve bu da tek yol değil). Gerçek yedekleme ve geri yükleme türlerinde, bir soruna neden olmaz (en azından söz konusu yazılım yetkin bir şekilde yazıldıysa): BackupReadtüm akışları serileştirir ve BackupWritedosyayı (alternatif akışlarla) serileştirilmiş biçim.
Jerry Coffin

Yedeklenen dosyaların NAS'ta doğrudan okunmasını isteyip istemediğinize bağlıdır. Bunu yaparsanız (ve özel geri yükleme programlarına ihtiyaç duymazsanız), düz ole dosyaları ile sıkışıp kalırsınız.
quickly_now
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.