मैं सॉफ़्टवेयर के एक टुकड़े पर काम कर रहा हूं जो फाइल सिस्टम में फ़ाइलों को संग्रहीत करता है, साथ ही डेटाबेस में उन फ़ाइलों के संदर्भ भी देता है। अपलोड की गई फाइलों को क्वेरी करने से फ़ाइल सिस्टम तक पहुंचने के बिना डेटाबेस में किया जा सकता है। मैंने जो अन्य पोस्टों में पढ़ा है, उससे ज्यादातर लोग कहते हैं कि फाइल स्टोरेज के लिए फाइल सिस्टम का उपयोग करना बेहतर है, फिर बाइनरी डेटा को सीधे डेटाबेस में बीएलओबी के रूप में संग्रहीत करना बेहतर है।सिंक में मेरा डेटाबेस और फ़ाइल सिस्टम रखना
तो अब मैं इसे स्थापित करने का सबसे अच्छा तरीका समझने की कोशिश कर रहा हूं ताकि डेटाबेस दोनों फाइल सिस्टम सिंक हो जाएं और मैं उन फ़ाइलों के संदर्भों के साथ समाप्त नहीं हूं जो मौजूद नहीं हैं, या फाइलें फ़ाइल सिस्टम में अप स्पेस जिसे संदर्भित नहीं किया गया है। यहां कुछ विकल्प दिए गए हैं जिन पर मैं विचार कर रहा हूं।
विकल्प 1: जोड़े फ़ाइल संदर्भ पहले
//Adds a reference to a file in the database
database.AddFileRef("newfile.txt");
//Stores the file in the file system
fileStorage.SaveFile("newfile.txt",dataStream);
क्योंकि फाइल करने के लिए संदर्भ वास्तविक फ़ाइल पहले जोड़ा जाता है, तो किसी अन्य उपयोगकर्ता से पहले एक फ़ाइल डाउनलोड करने की कोशिश कर रहा हो सकती यह विकल्प समस्याग्रस्त किया जाएगा यह वास्तव में सिस्टम में संग्रहीत है। हालांकि, फ़ाइल के संदर्भ को हाथ से पहले बनाया गया है, इसलिए फाइल को संग्रहीत करते समय प्राथमिक कुंजी मान का उपयोग किया जा सकता है।
विकल्प 2: दुकान फ़ाइल पहले
//Stores the file
fileStorage.SaveFile("newfile.txt",dataStream);
//Adds a reference to the file in the database
//fails if reference file does not existing in file system
database.AddFileRef("newfile.txt");
यह विकल्प बेहतर है, लेकिन किसी प्रणाली है कि संदर्भित कभी नहीं करने के लिए एक फ़ाइल अपलोड करने के लिए यह संभव होगा। यद्यपि इसका उपयोग "Purge" या "CleanUpFileSystem" फ़ंक्शन से किया जा सकता है जो किसी भी संदर्भित फ़ाइलों को हटा देता है। यह विकल्प डेटाबेस से प्राथमिक कुंजी मान का उपयोग करके फ़ाइल को संग्रहीत करने की अनुमति नहीं देगा।
विकल्प 3: लंबित स्थिति
//Adds a pending file reference to database
//pending files would be ignored by others
database.AddFileRef("newfile.txt");
//Stores the file, fails if there is no
//matching pending file reference in the database
fileStorage.SaveFile("newfile.txt",dataStream); database
//marks the file reference as committed after file is uploaded
database.CommitFileRef("newfile.txt");
यह विकल्प फ़ाइल अपलोड होने से पहले प्राथमिक कुंजी बनाए जा सकते हैं, लेकिन यह भी एक फ़ाइल का संदर्भ प्राप्त करने से पहले यह अपलोड की गई है से अन्य उपयोगकर्ताओं को रोकता है। हालांकि, फ़ाइल को कभी भी अपलोड नहीं किया जा सकता है, और फ़ाइल संदर्भ लंबित होने के लिए संभव है। फिर भी, डेटाबेस से लंबित संदर्भों को शुद्ध करने के लिए यह काफी छोटा होगा।
मैं विकल्प 2 की ओर झुका रहा हूं, क्योंकि यह आसान है, और मुझे अपलोड करने से पहले फ़ाइलों का अनुरोध करने का प्रयास करने वाले उपयोगकर्ताओं के बारे में चिंता करने की आवश्यकता नहीं है। भंडारण सस्ता है, इसलिए अगर मैं कुछ अपरिवर्तित फाइलों को स्थान ले रहा हूं तो यह दुनिया का अंत नहीं है। लेकिन यह भी एक आम समस्या की तरह प्रतीत होता है, और मैं यह सुनना चाहता हूं कि दूसरों ने इसे कैसे हल किया है या अन्य विचारों को मुझे बनाना चाहिए।
बहुत बुद्धिमान सवाल:
Python
शब्दावली में। कई लोग अपने अलग-अलग डेटा स्टोर्स के बीच स्थिरता के बारे में कभी नहीं सोचते हैं। – usr