Saya perhatikan di mana saya bekerja orang tertarik untuk menyimpan informasi dalam nama file, dan parsing nama file.
Bagi saya ini sepertinya bukan latihan yang bagus. Saya sudah melihat masalah sesekali dengan skrip menggumpal untuk file, dan mendapatkan yang salah karena file lain cocok terlebih dahulu. Kami juga membahas bagaimana mengatasi masalah dengan pemisah untuk bidang.
Apakah itu dianggap praktik yang buruk atau tidak?
Apa solusi lain yang diterima untuk mengambil file dari sistem file berdasarkan beberapa jenis metadata?
programming-practices
wobbily_col
sumber
sumber
Jawaban:
Ya saya pikir itu praktik buruk. Ini tunduk pada semua jenis masalah - misalnya batas panjang, masalah penyandian dan konflik karena data duplikat.
Lebih baik menggunakan "file master" (kadang-kadang disebut manifes atau indeks) yang berisi metadata dan path ke file. Atau sesuatu yang serupa dalam database, daftar atau yang lainnya. Atau untuk meletakkan meta data di dalam file aktual, di tingkat atas beberapa struktur data yang terkandung dalam file misalnya JSON atau XML.
Ini agak analog dengan konsep meletakkan informasi, atau menempatkan kunci nama di penyimpanan nilai kunci. Saya pikir ini ok selama Anda menggunakannya hanya untuk namespace dan melakukan pencarian cepat - komponen kunci tidak ada untuk memberikan informasi yang dapat diuraikan. Jika Anda membutuhkan informasi itu, duplikat ke dalam nilai (file dalam kasus di atas).
sumber
Pertama, metadata adalah konsep yang buram.
Yang mengatakan, banyak kasus metadata dalam file sudah ada:
Namun demikian, daftar pendek itu bukan argumen yang mendukung praktik tersebut.
Alternatifnya adalah:
sumber
Sepertinya Anda membutuhkan database.
Ada banyak masalah keamanan dengan menempatkan data pengguna dalam nama file. Katakanlah Anda memiliki file untuk setiap pengguna ("username.txt"). Apa yang terjadi ketika seseorang mendaftarkan nama pengguna "../../../../etc/passwd" tergantung pada bagaimana Anda memfilter input pengguna.
Kerangka kerja basis data terkadang akan membantu Anda membersihkan input pengguna.
sumber
Tidak ... yah .. belum tentu.
Selama Anda memiliki konvensi yang ketat dan sarana parsing dan validasi umum (skrip, perpustakaan, dll.) Tersedia, Anda siap melakukannya.
Ambil contoh pengemasan dan sistem manajemen ketergantungan (Maven, NuGet dan sejenisnya). Meskipun banyak yang akan menggunakan file spesifik untuk metadata untuk menyimpan informasi yang lebih lanjut, informasi dasar seringkali merupakan bagian dari nama file itu sendiri. Bergantung pada konvensi yang ketat, nama file dapat berisi informasi yang paling relevan tentang paket: itu vendor, itu nama, itu versi, itu tipe. Terkadang hanya itu yang Anda butuhkan ... 4 atau 5 informasi singkat.
Jika metadata sederhana maka konvensi penamaan file masuk akal tidak memerlukan apa-apa untuk menempatkannya. Ini dapat diperkuat dengan alat dan skrip yang sangat sederhana, tidak perlu database, tidak ada infrastruktur khusus hanya beberapa skrip dan konvensi penamaan.
Jika tidak ada yang cukup melakukan apa yang Anda butuhkan dan kebutuhan Anda sederhana saya akan mulai dengan ini.
persyaratan Anda melebihi konvensi ini? lanjutkan dengan file metadata yang tepat. Anda nanti perlu pencarian yang lebih baik untuk ini? Sudah ada solusi bagus di luar sana untuk mencari file yang membawa Anda ke tempat yang Anda butuhkan.
Bukannya saya tidak suka basis data, justru sebaliknya mereka benar-benar kuat dan berguna tetapi mereka membutuhkan sejumlah biaya tambahan untuk bisa berjalan. Mereka perlu diinstal, didukung, dipelihara, Anda akan membutuhkan staf yang, jika tidak sepenuhnya berdedikasi, perlu mendedikasikan sebagian waktu mereka untuk infrastruktur ini. Mereka juga lebih kompleks dan samar untuk orang awam, kehilangan dev yang mengatur Anda dan sistem Anda akan terjebak dalam waktu sampai Anda menemukan penggantinya.
Jangan pernah meremehkan kekuatan teknologi rendah dengan pengawasan yang tepat, itu bisa membuat Anda jauh.
Dan pada saat Anda melebihi solusi berteknologi rendah Anda, Anda akan telah mengumpulkan semua pengalaman dan persyaratan untuk menerapkan sistem yang sempurna untuk kebutuhan Anda.
sumber
Pertama, mari kita setuju apa file adalah . File adalah data paket dengan nama yang dapat ditransmisikan, diterima, dibuat dan dihapus dengan operasi atom (sangat dekat dengan).
Banyak sistem file (Mac OS, dan sistem file Linux yang lebih baru) menerapkan "garpu", sering digunakan untuk menyimpan sumber daya dan metadata. Pendekatan untuk menyimpan metadata ini bermasalah karena metode transfer jaringan tradisional, metode cadangan dan pemulihan, serta metode menyalin file tidak konsisten, terutama ketika sistem file sumber dan tujuan memahami garpu file secara berbeda.
Nama file digunakan untuk menyimpan metadata karena a) selalu ada, b) metadata selalu ada dalam nama file (setidaknya dalam penggunaan ekstensi file), dan c) nama file mengalami terjemahan yang sangat sedikit saat memindahkan antar sistem (perbedaan case, batasan set karakter, batasan karakter).
Jadi, nama file terlihat, portabel, dan dapat dikelola. Ini bukan hal yang buruk untuk menyimpan beberapa metadata.
Mungkin solusi terbaik untuk mengatasi metadata file umum adalah dengan menggunakan repositori konten , di mana repositori konten dapat dikonfigurasi dengan skema metadata yang akan digunakan untuk file. Dalam banyak kasus ini berlebihan, tetapi, IMHO, adalah cara untuk pergi untuk manajemen metadata yang serius.
sumber
Menurut saya ini adalah bahwa Anda mungkin telah melihat beberapa kode di suatu tempat yang melakukan hal-hal yang ceroboh atau rapuh dengan nama file, tetapi itu tidak berarti bahwa "menyimpan metadata dalam nama file" secara umum buruk.
Nama file adalah metadata - mereka adalah data tentang data dalam file, terlepas dari data file itu sendiri. Bahkan, nama file sudah sangat tua sehingga mereka mungkin adalah contoh kanonik dari metadata.
Jika Anda menganggap bahwa ekstensi file hanyalah bagian akhir dari nama file, maka konsep nama file-sebagai-metadata menjadi semakin tak terhindarkan.
sumber