2011-10-03 7 views
5

मेरे पास एक ऐसी स्थिति है जहां उपयोगकर्ता किसी एप्लिकेशन के भीतर फाइल संलग्न कर रहा है, फिर इन फ़ाइलों को एज़ूर ब्लॉब स्टोरेज में रखा जाता है, वहां एक उचित संभावना है कि डुप्लिकेट होने जा रहे हैं और मैं एक समाधान स्थापित करना चाहता हूं जहां डुप्लिकेट ब्लब्स से बचा जाता हैडुप्लिकेट ब्लब्स से बचने के लिए Azure संग्रहण का उपयोग करते समय ब्लॉब डेटा के प्रतीकात्मक लिंक करने का कोई तरीका है?

मेरी पहली सोचा सिर्फ filename_hash के रूप में ब्लॉब नाम के लिए है, लेकिन केवल डुप्लिकेट का एक सबसेट कैप्चर कि, तो filesize_hash तो अगले सोचा था।

ऐसा करने हालांकि ऐसा लगता है जैसे मैं ब्लॉब भंडारण के लचीलेपन के कुछ फ़ाइल के पदानुक्रम में स्थिति का प्रतिनिधित्व करने के लिए खोने हूँ में, देखें: Windows Azure: How to create sub directory in a blob container

इसलिए मैं अगर वहाँ एक था देखने के लिए देख रहा था एक ब्लॉब बनाने का तरीका जो ब्लॉब डेटा का संदर्भ देता है यानी कुछ प्रतीकात्मक लिंक के लिए, लेकिन जो भी मैं चाहता था उसे नहीं मिला।

क्या मुझे कुछ याद आ रहा है या मुझे filesize_hash विधि के साथ जाना चाहिए और वैकल्पिक विधि का उपयोग करके अपने पदानुक्रम को स्टोर करना चाहिए।

+0

ब्लॉब्स में मेटाडाटा विशेषता समर्थन है, अगर आपको मूल के बारे में कुछ संकेतक स्टोर करने की आवश्यकता है, लेकिन मुझे समझ में नहीं आता कि वास्तविक समस्या क्या है। यदि आप बताते हैं कि समस्या क्यों उत्पन्न होती है तो आप बेहतर प्रतिक्रिया प्राप्त कर सकते हैं। – codingoutloud

उत्तर

2

नहीं, कोई प्रतीकात्मक लिंक नहीं है (स्रोत: http://social.msdn.microsoft.com/Forums/vi-VN/windowsazuredata/thread/6e5fa93a-0d09-44a8-82cf-a3403a695922)।

एक अच्छा समाधान फाइलों के अनुमानित आकार और डुप्लिकेट की संख्या पर निर्भर करता है। यदि कई डुप्लिकेट नहीं होने जा रहे हैं, या फाइलें छोटी हैं, तो यह वास्तव में इसके साथ रहने के लिए तेज़ और सस्ता हो सकता है - प्रति माह $ 0.15 प्रति गीगाबाइट विकास लागत की तुलना में भुगतान करने का एक बड़ा सौदा नहीं है! (यही वह दृष्टिकोण है जिसे हम ले रहे हैं।)

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

यदि आप ऐसा करते हैं तो आप फ़ाइल नाम को संरक्षित करना चाहते हैं (जैसा कि उपयोगकर्ता के लिए दृश्यमान होगा) लेकिन आप "फ़ोल्डर" स्थान को जो भी चाहते हैं उसे कॉल कर सकते हैं।

+0

धन्यवाद, इस मामले में विकास की लागत इसके लायक नहीं है। – JTew

2

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

मैंने एक ही सेटअप में निर्णय लिया कि प्रत्येक अपलोड की गई फाइल के एमडी 5 को एक टेबल में स्टोर करें और फिर एक वर्ष में वापस जाएं और देखें कि कितने गणतंत्र अपलोड किए गए हैं और कितना संग्रहण बचाया जा सकता है। उस समय यह प्रतीकात्मक लिंक के समाधान को कार्यान्वित करने के लायक होने पर इसे विकसित करना आसान बना देगा।

तालिका भंडारण में इसे बनाए रखने का नकारात्मक हिस्सा यह है कि आपको अपने ब्लब्स के लिए सीमित क्वेरी एपीआई मिलती है। इसके बजाय मैं लिंक बनाने के लिए ब्लॉब्स पर मेटाडेटा का उपयोग करने का सुझाव दूंगा। (आरईएसटी एपीआई ईटीटी का उपयोग करते समय मेटा डेटा अनुरोधों पर सामान्य शीर्षकों में बदल जाता है)।

तो गणराज्य ब्लॉब्स के लिए, बस उनमें से एक रखें और एक लिंक हेडर स्टोर करें जहां डेटा है।

blob.Metadata.Add("link", dataBlob.Name); 
await blob.SetMetadataAsync(); 
await blob.UploadTextAsync(""); 

इस बिंदु पर ब्लॉब अब कोई डेटा नहीं लेता है लेकिन अभी भी स्टोरेज में मौजूद है और ब्लॉब्स सूचीबद्ध करते समय वापस आ जाएगा।

फिर डेटा तक पहुंचने पर आपको बस यह जांचना होगा कि ब्लॉब में "लिंक" मेटाडाटा सेट है या बाकी के साथ, जांचें कि कोई एक्स-एमएस-मेटा-लिंक हेडर मौजूद है या फिर वहां से डेटा पढ़ें।

blob.Container.GetBlockBlobReference(blob.Metadata["link"]).DownloadTextAsync() 

या डेटा तक पहुंचने के लिए अन्य तरीकों में से कोई भी तरीका।

ऊपर मूल बातें हैं और मुझे यकीन है कि यदि आप इसका उपयोग करते हैं तो बाकी को समझ सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे