Meta veri bilgilerini dosya adlarında saklamak kötü bir uygulama mudur? Daha iyi çözümler?


13

Nerede çalıştığımı fark ettim, insanlar dosya adlarında bilgi depolamaya ve dosya adlarını ayrıştırmaya istekli.

Bana göre bu özellikle iyi bir uygulama gibi görünmüyor. Zaten bir dosya için globbing ve yanlış bir alıyorum zaman zaman sorunları görüyorum çünkü başka bir dosya önce eşleşir.Ayrıca alanlar için ayırıcılar ile ilgili sorunları nasıl çözüleceğini tartışıyoruz.

Kötü uygulama olarak mı değerlendiriliyor?

Bir tür meta verilere dayalı olarak bir dosya sisteminden dosya almak için kabul edilen diğer çözümler nelerdir?


Dosya adında tam olarak neyin depolandığına çok bağlıdır. Bize bazı örnekler verebilir misiniz?
T. Sar

Yanıtlar:


14

Evet bence kötü bir uygulama. Her türlü soruna tabidir - örneğin uzunluk sınırları, kodlama sorunları ve yinelenen verilerden kaynaklanan çakışmalar.

Daha iyi, meta veriler ve dosyaların yollarını içeren bir "ana dosya" (bazen manifest veya index olarak adlandırılır) kullanmaktır. Ya da bir veritabanında benzer bir şey, kayıt ya da değil. Veya meta verileri gerçek dosyaların içine, örneğin JSON veya XML'deki dosyada bulunan bazı veri yapısının en üst düzeyine koymak için.

Bu, anahtar-değer mağazalarında bilgi koyma veya isim boşluğu koyma kavramına biraz benzemektedir. Ben sadece isim alanı için kullanmak ve hızlı aramalar yapmak sürece bu ok düşünüyorum - anahtar bileşenleri parsable bilgi sağlamak için orada değil. Bu bilgiye ihtiyacınız varsa, bu değeri değere kopyalayın (yukarıdaki durumda dosya).


3
Bağırsak noktaları yükseltiyorsun. Ancak yine de bilgileri dosya adına koymanın mantıklı olduğu durumlar vardır. Kural tabanlı bir şekilde yönlendirilmesi veya işlenmesi gereken posta eklerini düşünün. Birçok paralel işlem ana dosyayı değiştirmek zorunda kalırsa, bir darboğaz haline gelebilir.
Axel Kemper

Bir veritabanı geliştiricisi olarak, doğal olarak manifest dosyası (burada alternatif yöntemler için sormamın nedenlerinden biri) yerine bir veritabanı kullanmayı düşünüyorum. Bu, eşzamanlı erişim sorununu çözecektir, ancak daha karmaşık bir çözümdür.
wobbily_col

1
@wobbily_col, kullandığınız sisteme bağlı olarak, genişletilmiş dosya öznitelikleri için destek olabilir .
Hellion

@AxelKemper Bir ada sığabilecek çok fazla bilgi var. Ad ve yazardan daha fazla meta veri var.
Tulains Córdova

Bahsetmemek gerekirse, dosya adları sisteminizin dışındaki biri tarafından değiştirilebilir ve beklenen biçimleri bozabilir. Uygun dosya izinleriniz olsa bile, bu kırılgan bir çözüm haline gelir.
Berin Loritsch

5

Birincisi, meta veriler bulanık bir kavramdır.

Bununla birlikte, dosyalarda birçok meta veri vakası zaten var:

  • kitaplıkların sürüm numaraları
  • görüntülerin tarihi ve saati veya en azından dizi dizini
  • hangi uygulamanın dosyayı açması gerektiğini tetikleyen dosya türü
  • oturum kullanıcı adınız olması gereken ana dizininizin adı

Bununla birlikte, bu kısa liste uygulama lehine bir tartışma değildir.

Alternatifler:

  • Meta verileri FS düzeyinde, örneğin Apple eski HFS gibi işlemek
  • resimler için Exif veya sesler için ID3 gibi meta verileri dosyanın içine yerleştirin
  • meta verileri, çoğu medya yöneticisi gibi başka bir dosyaya veya veritabanına yerleştirin.

5
Her şey bulanık bir kavram. "Bulanık", "kavram" ve "her şey" bile bulanık kavramlardır.
Tulains Córdova

3

Bir veritabanına ihtiyacınız var gibi görünüyor.

Kullanıcı verilerini dosya adlarına koymakla ilgili birçok güvenlik sorunu vardır. Her kullanıcı için bir dosyanız olduğunu varsayalım ("kullanıcıadı.txt"). Birisinin "../../../../etc/passwd" kullanıcı adını kaydettirdiği şey, kullanıcı girişini nasıl filtrelediğinize bağlıdır.

Veritabanı çerçeveleri bazen kullanıcı girişini dezenfekte etmenize yardımcı olur.


Aslında, birçok işletim sistemi kullanıcı adlarını ana dizin olarak adlandırılan dizin adlarında depolar .
mouviciel

Çünkü birileri yazılım yığının en altında olmalıdır. Bu herkesin bu seviyede çalışması gerektiği anlamına gelmez. Veritabanlarının değerini tartışmayacağım çünkü programcılar bunları 50 yıldan uzun bir süredir kullanıyor.
Eric Wimberley

1
@mouviciel Kullanıcı adını kullanıcının ana dizin adından ayrıştıran herhangi bir işletim sisteminin farkında değilim. Windows ve Unix benzeri sistemler, dizinin adını bir tür veritabanında depolar ve kullanıcı oturum açtığında ortama yükler. Her iki sistemde de, giriş dizini adının kullanıcı adından farklı olması ( ör. kullanıcıları yeniden adlandırma veya aynı sistem bölümünde iki pencere yüklemeniz varsa).
Jules

2

Hayır ... iyi .. ille de değil.

Sıkı bir sözleşmeye ve ortak ayrıştırma ve doğrulama araçlarına (komut dosyaları, kütüphaneler vb.) Sahip olduğunuz sürece hazırsınız.

Örneğin, paketleme ve bağımlılık yönetim sistemlerini (Maven, NuGet ve benzerleri) ele alalım. Birçoğu daha gelişmiş bilgileri depolamak için meta veriler için belirli dosyaları kullansa da, temel bilgiler genellikle dosya adının kendisinin bir parçasıdır. Sıkı kurallara dayanarak, dosya adı paket hakkında en uygun bilgileri içerebilir: satıcı, adı, sürümü, türü. Bazen ihtiyacınız olan tek şey budur ... 4 veya 5 kısa bilgi parçası.

Meta veriler basitse, bir dosya adlandırma kuralı yerine koymak için hiçbir şey gerektirmeyen mükemmel bir anlam ifade eder. Çok basit araçlar ve komut dosyaları, veritabanı gerekmiyor, özel bir altyapı yok, sadece birkaç komut dosyası ve bir adlandırma kuralı ile güçlendirilebilir.

Orada hiçbir şey oldukça ne gerek yok ve ihtiyaçlarınızı basit yaparsanız ben bununla başlar.

gereksinimleriniz bu sözleşmeyi aşıyor mu? uygun bir meta veri dosyasıyla genişletebilirsiniz. Daha sonra bunun için daha iyi bir aramaya mı ihtiyacınız var? Sizi ihtiyacınız olan yere götüren dosyaları aramak için zaten iyi çözümler var.

Veritabanlarından hoşlanmıyorum, tam tersine gerçekten güçlü ve kullanışlılar, ancak devam etmek için bir miktar ek yük gerektiriyorlar. Kurulmaları, yedeklenmeleri, bakımları gerekir, tamamen adanmamış olmasa da zamanlarının bir kısmını bu altyapıya ayırması gereken personele ihtiyacınız olacaktır. Ayrıca laymenler için daha karmaşık ve şifreli, sizi ayarlayan geliştiriciyi kaybederler ve bir yedek bulana kadar sisteminiz zaman içinde sıkışır.

Düşük teknolojinin gücünü asla göz ardı edip uygun gözetim ile size uzun bir yol kazandırabilirsiniz.

Ve düşük teknoloji çözümünüzü aştığınız zaman, ihtiyaçlarınız için mükemmel sistemi uygulamak için tüm deneyim ve gereksinimleri bir araya getirmiş olacaksınız.


Atalet gücünü asla hafife almayın. Düşük teknolojili bir çözümü daha sağlam bir şeye dönüştürmek, bu şekilde başlamaktan çok daha fazla çaba gerektirir.
Berin Loritsch

1
@BerinLoritsch aynı argüman tüm çözüm, düşük teknoloji veya hitech için geçerlidir ... daha fazla sistem arası bağımlılık gerektiren hitech'in aslında bu durumu daha da kolay değil, daha da kötüleştirdiği iddia edilebilir. Bununla birlikte, basit bir düşük teknoloji çözümünün, tam gelişmiş yüksek teknoloji karşılığı olandan daha kıvrımlı hale geldiği eşik vardır.
Newtopian

1
Evet, şimdi bir projede bu tür birkaç örneği çözüyorum. Sonuç olarak, dosya sisteminden daha sık olmayan bir arayüze ihtiyaç duyulmaktadır. Ne yazık ki, miras aldığım düşük teknolojili sistemlerin çoğunda kendilerine uygun düşünce veya tasarım uygulanmıyor. Bir yandan sayabileceğim istisna sayısı.
Berin Loritsch

0

İlk olarak bize bir dosya neyi anlaşalım olduğunu . Dosya, atomik işlemlerle (çok yakın) iletilebilen, alınabilen, oluşturulabilen ve silinebilen bir adı olan paketlenmiş bir veridir .

Birçok dosya sistemi (Mac OS ve daha yeni Linux dosya sistemleri) genellikle kaynakları ve meta verileri depolamak için kullanılan "çatalları" uygular. Meta verileri depolamaya yönelik bu yaklaşım, geleneksel kaynak aktarma yöntemleri, yedekleme ve geri yükleme yöntemleri ve dosya kopyalama yöntemlerinin, özellikle kaynak ve hedef dosya sistemleri dosya çatallarını farklı algıladığında tutarsız olması nedeniyle sorunluydu.

Dosya adı meta verileri tutmak için kullanılır, çünkü a) her zaman oradadır, b) meta veriler dosya adında her zaman mevcuttur (en azından dosya uzantılarının kullanımında) ve c) dosya adı taşınırken çok az çeviri geçirir sistemler arasında (büyük / küçük harf ayrımları, karakter kümesi sınırlamaları, karakter sınırlamaları bir yana).

Bu nedenle, dosya adı görünür, taşınabilir ve yönetilebilir. Bu, bazı meta verileri depolamak için kötü bir şey değildir.

Muhtemelen genel dosya meta verilerini ele almak için en iyi çözüm , içerik havuzunun dosyalar için kullanılacak meta veri şemasıyla yapılandırılabileceği bir içerik havuzu kullanmaktır . Çoğu durumda bu aşırıya kaçar, ancak IMHO, ciddi meta veri yönetimine giden yoldur.


0

Bunu benim almam, dosya isimleri ile özensiz veya kırılgan şeyler yapan bir yerde bazı kodlar görmüş olabilirsiniz, ancak bu "dosya adlarında meta verileri depolamanın" genel olarak kötü olduğu anlamına gelmez.

Dosya adları şunlardır onlar dosya verilerinin kendisi bağımsız dosyadaki veri hakkında veri vardır metadata-. Aslında, dosya adları o kadar eskidir ki, büyük olasılıkla meta verilerin kanonik örneğidir.

Dosya uzantılarının dosya adının sadece son kısmı olduğunu düşünüyorsanız, meta veri olarak dosya adı kavramı daha da kaçınılmaz hale gelir.

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.