फ़ाइल नामों में मेटाडेटा जानकारी संग्रहीत करने के लिए यह बुरा अभ्यास है? बेहतर उपाय?


13

मैंने देखा है कि जहां मैं काम करता हूं लोग फ़ाइल नामों में जानकारी संग्रहीत करने और फ़ाइल नामों को पार्स करने के लिए उत्सुक हैं।

मेरे लिए यह विशेष रूप से अच्छा अभ्यास नहीं लगता है। मैं पहले से ही एक फ़ाइल के लिए ग्लोबिंग वाली स्क्रिप्ट के साथ सामयिक मुद्दों को देखता हूं, और गलत हो रहा है क्योंकि एक और फ़ाइल पहले से मेल खाती है। हम यह भी चर्चा कर रहे हैं कि खेतों के लिए विभाजकों के साथ समस्याओं को कैसे प्राप्त किया जाए।

इसे बुरा व्यवहार माना जाता है या नहीं?

किसी प्रकार के मेटाडेटा के आधार पर फ़ाइल सिस्टम से फ़ाइलों को पुनर्प्राप्त करने के लिए अन्य स्वीकृत समाधान क्या हैं?


यह बहुत कुछ इस बात पर निर्भर करता है कि वास्तव में फ़ाइल नाम पर क्या संग्रहीत किया जा रहा है। क्या आप हमें कुछ उदाहरण दे सकते हैं?
टी। सर

जवाबों:


14

हां मुझे लगता है कि यह बुरा व्यवहार है। यह सभी प्रकार की समस्याओं के अधीन है - उदाहरण के लिए डुप्लिकेट डेटा के कारण लंबाई सीमा, एन्कोडिंग समस्याएँ और विरोध।

बेहतर है कि एक "मास्टर फाइल" (कभी-कभी प्रकट या सूचकांक कहा जाता है) का उपयोग करें जिसमें फाइलें मेटाडेटा और पथ शामिल हैं। या एक डेटाबेस में कुछ इसी तरह, रजिस्टर या whatnot। या वास्तविक डेटा के अंदर मेटा डेटा डालने के लिए, उदाहरण के लिए JSON या XML में फ़ाइल में समाहित कुछ डेटास्ट्रक्चर के शीर्ष स्तर पर।

यह कुछ जानकारी रखने की अवधारणा के अनुरूप है, या की-वैल्यू स्टोर में चाबियां रखने का नाम है। मुझे लगता है कि यह तब तक ठीक है जब तक आप इसे केवल नाम स्थान पर उपयोग करते हैं और त्वरित लुकअप करते हैं - प्रमुख घटक पार्स करने योग्य जानकारी प्रदान करने के लिए नहीं हैं। यदि आपको उस जानकारी की आवश्यकता है, तो इसे मूल्य में डुप्लिकेट करें (उपरोक्त मामले में फ़ाइल)।


3
आप कण्ठ बिंदु बढ़ा रहे हैं। लेकिन ऐसी परिस्थितियां हैं जब यह जानकारी को फ़ाइल नाम में रखने के लिए समझ में आता है। मेल अटैचमेंट के बारे में सोचें जिन्हें नियम-आधारित तरीके से रूट करना या प्रोसेस करना है। यदि कई समानांतर प्रक्रियाओं को मास्टर फ़ाइल को बदलना है, तो यह एक अड़चन बन सकती है।
एक्सल केम्पर

डेटाबेस डेवलपर के रूप में, मैं स्वाभाविक रूप से एक प्रकट फ़ाइल के बजाय डेटाबेस का उपयोग करने के बारे में सोचता हूं (एक कारण जो मैं यहां वैकल्पिक तरीकों के लिए पूछता हूं)। यह समवर्ती पहुंच समस्या का समाधान करेगा, लेकिन अधिक जटिल समाधान है।
wobbily_col

1
@wobbily_col, आपके द्वारा उपयोग किए जाने वाले सिस्टम के आधार पर, उपलब्ध फ़ाइल विशेषताओं के लिए समर्थन हो सकता है।
हेलियन

@AxelKemper केवल इतनी जानकारी है कि आप एक नाम में फिट हो सकते हैं। नाम और लेखक की तुलना में अधिक मेटाडेटा है।
ट्यूलेंस कोर्डोवा

फ़ाइलनामों का उल्लेख नहीं करना आपके सिस्टम के बाहर किसी व्यक्ति द्वारा बदला जा सकता है, किसी भी अपेक्षित प्रारूप को तोड़ सकता है। जब आपके पास उपयुक्त फ़ाइल अनुमतियाँ लागू होती हैं, तब भी यह एक भंगुर समाधान होता है।
बेरिन लोरिट्श

5

सबसे पहले, मेटाडेटा एक धुंधली अवधारणा है।

कहा कि, फाइलों में मेटाडेटा के कई मामले पहले से मौजूद हैं:

  • पुस्तकालयों की संस्करण संख्या
  • छवियों की तारीख और समय, या कम से कम अनुक्रम सूचकांक
  • फ़ाइल प्रकार, जो ट्रिगर करता है कि किस एप्लिकेशन को फ़ाइल खोलनी चाहिए
  • आपके होम डायरेक्टरी का नाम, जो आपका सत्र उपयोगकर्ता नाम होना चाहिए

फिर भी, वह छोटी सूची अभ्यास के पक्ष में तर्क नहीं है।

विकल्प हैं:

  • उदाहरण के लिए, Apple के पुराने HFS की तरह FS स्तर में मेटाडेटा को संभालना
  • फ़ाइल में मेटाडेटा ही डालें, जैसे छवियों के लिए Exif या ध्वनियों के लिए ID3
  • मेटाडेटा को किसी अन्य फ़ाइल या डेटाबेस में, अधिकांश मीडिया प्रबंधकों की तरह रखें।

5
सब कुछ एक धुंधली अवधारणा है। यहां तक ​​कि "धुंधली", "अवधारणा" और "सब कुछ" धुंधली अवधारणाएं हैं।
ट्यूलेंस कोर्डोवा

3

ऐसा लगता है कि आपको डेटाबेस की आवश्यकता है।

फ़ाइल नामों में उपयोगकर्ता डेटा डालने के साथ बहुत सारे सुरक्षा मुद्दे हैं। मान लें कि आपके पास प्रत्येक उपयोगकर्ता ("username.txt") के लिए एक फ़ाइल है। क्या होता है जो कोई उपयोगकर्ता नाम पंजीकृत करता है "../../../../etc/passwd" इस बात पर निर्भर करता है कि आप उपयोगकर्ता इनपुट कैसे फ़िल्टर कर रहे हैं।

डेटाबेस ढांचा कभी-कभी उपयोगकर्ता इनपुट को सैनिटाइज़ करने में आपकी सहायता करेगा।


दरअसल, कई ऑपरेटिंग सिस्टम उपयोगकर्ता नामों को निर्देशिका नामों में संग्रहीत करते हैं, जिन्हें होम डायरेक्टरी कहा जाता है
मौविसील

ऐसा इसलिए है क्योंकि कुछ सॉफ्टवेयर सॉफ़्टवेयर स्टैक के निचले भाग में होना चाहिए। इसका मतलब यह नहीं है कि सभी को उस स्तर पर काम करना होगा। मैं डेटाबेस की योग्यता पर बहस नहीं करने जा रहा हूं, क्योंकि प्रोग्रामर उन्हें 50 से अधिक वर्षों से उपयोग कर रहे हैं।
एरिक विम्बरले

1
@mouviciel मुझे किसी भी ऑपरेटिंग सिस्टम के बारे में पता नहीं है जो उपयोगकर्ता के होम डायरेक्टरी नाम से उपयोगकर्ता के नाम को पार्स करता है। विंडोज और यूनिक्स जैसी प्रणाली दोनों किसी प्रकार के डेटाबेस में निर्देशिका के नाम को संग्रहीत करते हैं और उपयोगकर्ता के लॉग इन करते समय इसे पर्यावरण में लोड करते हैं। दोनों प्रणालियों के तहत, आप होम निर्देशिका नाम उपयोगकर्ता के नाम से अलग होने के साथ समाप्त हो सकते हैं ( उदाहरण के लिए उपयोगकर्ताओं का नाम बदलना, या यदि आपके पास एक ही सिस्टम विभाजन पर दो विंडोज़ इंस्टाल हैं)।
जूल्स

2

नहीं ... ठीक है .. जरूरी नहीं।

जब तक आपके पास एक सख्त सम्मेलन और सामान्य पार्सिंग और सत्यापन का मतलब है (स्क्रिप्ट, लाइब्रेरी आदि) आसानी से उपलब्ध है आप जाने के लिए अच्छे हैं।

उदाहरण के लिए पैकेजिंग और निर्भरता प्रबंधन प्रणाली (Maven, NuGet और पसंद) ले लो। हालांकि कई लोग मेटाडेटा के लिए अधिक उन्नत जानकारी संग्रहीत करने के लिए विशिष्ट फ़ाइलों का उपयोग करेंगे, बुनियादी जानकारी अक्सर फ़ाइल नाम का ही हिस्सा होती है। सख्त सम्मेलनों पर भरोसा करते हुए फ़ाइल नाम में पैकेज के बारे में सबसे प्रासंगिक जानकारी हो सकती है: यह विक्रेता है, यह नाम है, यह संस्करण है, यह प्रकार है। कभी-कभी आपको केवल जानकारी की आवश्यकता होती है ... जानकारी के 4 या 5 छोटे टुकड़े।

यदि मेटाडेटा सरल है, तो एक फ़ाइल नामकरण सम्मेलन सही अर्थ बनाता है, जिसमें कुछ भी डालने की आवश्यकता नहीं होती है। यह बहुत ही सरल उपकरणों और लिपियों के साथ मजबूत किया जा सकता है, किसी डेटाबेस की आवश्यकता नहीं है, कोई विशेष इन्फ्रास्ट्रक्चर नहीं है बस कुछ स्क्रिप्ट और एक नामकरण सम्मेलन है।

अगर वहाँ कुछ भी नहीं है क्या आप की जरूरत है और अपनी आवश्यकताओं को सरल कर रहे हैं मैं इस के साथ शुरू होगा।

आपकी आवश्यकताओं ने इस सम्मेलन को आगे बढ़ाया? इसे एक उचित मेटाडेटा फ़ाइल के साथ विस्तारित करें। आपको बाद में इसके लिए बेहतर खोज की आवश्यकता है? वहाँ फ़ाइलों को खोजने के लिए पहले से ही अच्छे समाधान मौजूद हैं जो आपको उस स्थान पर ले जाते हैं जहाँ आपको ज़रूरत है।

ऐसा नहीं है कि मैं डेटाबेस को नापसंद करता हूं, इसके विपरीत वे वास्तव में शक्तिशाली और उपयोगी हैं लेकिन उन्हें जाने के लिए कुछ मात्रा में ओवरहेड की आवश्यकता होती है। उन्हें स्थापित करने, बैकअप लेने, बनाए रखने की आवश्यकता है, आपको ऐसे कर्मचारियों की आवश्यकता होगी, जो पूरी तरह से समर्पित नहीं हैं, उन्हें इस बुनियादी ढांचे के लिए अपने समय का हिस्सा समर्पित करने की आवश्यकता होगी। वे आम आदमी के लिए अधिक जटिल और गूढ़ भी हैं, आपको स्थापित करने वाले देव को ढीला कर देते हैं और जब तक आप एक प्रतिस्थापन नहीं पाते हैं, तब तक आपका सिस्टम समय पर अटका रहेगा।

कभी भी उचित ओवरसाइट के साथ कम तकनीक की शक्ति को कम मत समझो यह आपको एक लंबा रास्ता तय कर सकता है।

और जब तक आप अपने कम तकनीकी समाधान को आगे नहीं बढ़ाते हैं, तब तक आप अपनी आवश्यकताओं के लिए सही प्रणाली को लागू करने के लिए सभी अनुभव और आवश्यकताओं को इकट्ठा करेंगे।


जड़ता की शक्ति को कभी कम मत समझो। कम तकनीकी समाधान को कुछ और अधिक मजबूत बनाने में बहुत अधिक प्रयास करना पड़ता है, बस इसे शुरू करने के तरीके से नहीं।
बेरिन लोरिट्श

1
@BerinLoritsch एक ही तर्क सभी समाधानों, निम्न-तकनीक या हाईटेक पर लागू होता है ... कोई यह तर्क दे सकता है कि हाईटेक अधिक सिस्टम इंटर-डिपेंडेंसी की आवश्यकता वास्तव में इस स्थिति को सबसे खराब बनाती है, आसान नहीं। उस ने कहा, वहाँ थ्रेशोल्ड है जहां एक सरल कम-तकनीकी समाधान पूर्ण विकसित उच्च-तकनीकी समकक्ष की तुलना में अधिक जटिल हो जाता है।
न्यूटॉपियन

1
हाँ, और मैं एक परियोजना पर अब इस तरह के एक जोड़े को एकजुट कर रहा हूँ। लब्बोलुआब यह है कि फ़ाइल सिस्टम की तुलना में अधिक बार एक सख्त इंटरफ़ेस होने की आवश्यकता नहीं है। दुर्भाग्य से, सबसे कम तकनीक वाले सिस्टम जो मुझे विरासत में मिले हैं, उनके लिए उपयुक्त विचार या डिज़ाइन लागू नहीं है। अपवादों की संख्या मैं एक हाथ पर भरोसा कर सकता हूं।
बेरिन लोरिट्श

0

सबसे पहले, हमें सहमत हैं कि फ़ाइल क्या है । एक फ़ाइल एक नाम के साथ एक पैकेज्ड डेटा है जिसे परमाणु परिचालनों के साथ (बहुत करीब से) प्रसारित, प्राप्त, बनाया और हटाया जा सकता है।

कई फ़ाइल सिस्टम (मैक ओएस, और अधिक हाल ही में लिनक्स फ़ाइल सिस्टम) "कांटे" को लागू करते हैं, अक्सर संसाधनों और मेटाडेटा को स्टोर करने के लिए उपयोग किया जाता है। मेटाडेटा को संग्रहीत करने के लिए यह दृष्टिकोण उस समस्याग्रस्त था जिसमें पारंपरिक नेटवर्क हस्तांतरण विधियों, बैकअप और पुनर्स्थापना विधियों और फ़ाइल प्रतिलिपि विधियों को असंगत किया गया था, खासकर जब स्रोत और गंतव्य फ़ाइल सिस्टम फ़ाइल फोर्क्स को अलग तरह से समझते थे।

फ़ाइल नाम का उपयोग मेटाडेटा रखने के लिए किया जाता है क्योंकि a) यह हमेशा रहता है, b) मेटाडेटा हमेशा फ़ाइल नाम (कम से कम फ़ाइल एक्सटेंशन के उपयोग में) में मौजूद रहा है, और c) फ़ाइल का नाम चलते समय बहुत कम अनुवाद से गुजरता है सिस्टम के बीच (मामले के भेद, चरित्र सेट सीमाएं, चरित्र सीमाएं एक तरफ)।

तो, फ़ाइल नाम दृश्यमान, पोर्टेबल और प्रबंधनीय है। कुछ मेटाडेटा को संग्रहीत करने के लिए यह एक बुरी बात नहीं है।

संभवतः सामान्य फ़ाइल मेटाडेटा को संबोधित करने का सबसे अच्छा समाधान एक सामग्री रिपॉजिटरी का उपयोग करना है , जहां फ़ाइलों के लिए उपयोग किए जाने वाले मेटाडेटा स्कीमा के साथ सामग्री रिपॉजिटरी को कॉन्फ़िगर किया जा सकता है। कई मामलों में यह ओवरकिल है, लेकिन, IMHO, गंभीर मेटाडेटा प्रबंधन के लिए रास्ता है।


0

इस पर मेरा कहना है कि आपने कहीं न कहीं ऐसा कोड देखा होगा जो फ़ाइल के नाम के साथ मैला या भंगुर काम करता है, लेकिन इसका मतलब यह नहीं है कि "फ़ाइलनाम में मेटाडेटा को संग्रहीत करना" सामान्य रूप से खराब है।

फ़ाइल नाम हैं metadata- वे फ़ाइल में डेटा के बारे में डेटा, फ़ाइल डेटा अपने आप से स्वतंत्र हैं। वास्तव में, फ़ाइलनाम इतने पुराने हैं कि वे शायद मेटाडेटा के विहित उदाहरण हैं।

यदि आप मानते हैं कि फ़ाइल एक्सटेंशन फ़ाइल नाम का सिर्फ एक अंतिम हिस्सा है, तो फ़ाइल नाम-ए-मेटाडेटा अवधारणा और भी अपरिहार्य हो जाती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.