2012-01-17 13 views
5

मैं परिवर्तनों के लिए एज़ूर ब्लॉब स्टोरेज में एक कंटेनर/फ़ोल्डर की निगरानी करने का सबसे अच्छा तरीका ढूंढ रहा हूं। अब तक मुझे ऐसा करने का एक तरीका मिला है, जो किसी कार्यकर्ता प्रक्रिया को कहीं भी चलाने के लिए है जो बदलावों को देखने के लिए नियमित आधार पर कंटेनर की सामग्री को पिंग करता है।परिवर्तन के लिए एज़ूर ब्लॉब स्टोरेज में एक कंटेनर की निगरानी करने का सबसे अच्छा तरीका क्या है?

क्या कोई बेहतर तरीका है?

+0

ऐसा लगता है कि अगर आप चलाता चाहते हैं, आपके पास एसक्यूएल एज़ूर का उपयोग करने के लिए। यहां एक अच्छी छोटी तुलना है: http://brian.chipsofttech.com/blogs/brian/post/Azure-Data-Storage.aspx –

+0

एसक्यूएल एज़ूर ट्रिगर ब्लॉब स्टोरेज कंटेनर पर लागू नहीं होते हैं, न ही SQL Azure द्रव्यमान- ब्लब्स और कंटेनरों की भंडारण क्षमता। –

उत्तर

9

स्टोरेज एसडीके यह प्रदान नहीं करता है, लेकिन यह नए वेबजब्स एसडीके में एक प्राथमिक विशेषता है। एक [BlobInput] विशेषता है जो आपको सुनने के लिए एक कंटेनर निर्दिष्ट करने देती है, और इसमें एक कुशल ब्लॉब श्रोता शामिल है जो नए ब्लॉब्स का पता लगाए जाने पर विधि को प्रेषित करेगा। वहाँ ब्लॉब के कुछ उदाहरण सुन रहे हैं पर: http://blogs.msdn.com/b/jmstall/archive/2014/02/18/azure-storage-bindings-part-1-blobs.aspx

यहाँ एक उदाहरण उपयोग है:

public static void CopyWithStream(
     [BlobInput("container/in/{name}")] Stream input, 
     [BlobOutput("container/out1/{name}")] Stream output 
     ) 
    { 
     Debug.Assert(input.CanRead && !input.CanWrite); 
     Debug.Assert(!output.CanRead && output.CanWrite); 

     input.CopyTo(output); 
    } 

और ब्लॉब श्रोता यहाँ किया जा रहा है:

 JobHost host = new JobHost(acs); // From nuget: Microsoft.WindowsAzure.Jobs.Host 
     host.RunAndBlock(); 
+0

यह उल्लेखनीय है कि कंटेनर को हर 10 मिनट (!) स्कैन किया जा रहा है। तो वेब नौकरी तुरंत ट्रिगर नहीं किया जाएगा। – johni

1

कोई बेहतर तरीका नहीं है, IMHO। माफ़ कीजिये। एचटीएच

0

इगोर का अधिकार, जिसमें आपको कंटेनर को मतदान करने की आवश्यकता होगी। मैं बस कुछ स्पष्ट करना चाहता था। जब आप ने कहा:

रन एक कार्यकर्ता प्रक्रिया कहीं कि एक नियमित आधार पर कंटेनर की सामग्री को पिंग्स परिवर्तन

वर्कर प्रोसेस एक वेब भूमिका या कार्यकर्ता भूमिका में एक धागा हो सकता है, देखने के लिए रन() लूप, आदि। इसे एक अलग भूमिका की आवश्यकता नहीं है। बस सुनिश्चित करें कि आपका मतदान कोड एकाधिक भूमिका उदाहरणों के साथ काम करता है (उदाहरण के लिए आप यह सुनिश्चित करने के लिए कि आप केवल एक उदाहरण से मतदान कर रहे हैं, म्यूटेक्स के रूप में कुछ प्रकार का पेज ब्लॉब पट्टा करना चाहें)। आप Azure Queues के माध्यम से भी ऐसा कर सकते हैं, क्योंकि कतार संदेश अब संदेश निर्माण पर अदृश्यता टाइमआउट का समर्थन करते हैं।

4

जैसा कि अन्य ने कहा था, आपके आवेदन के लिए उचित अंतराल में मतदान ठीक है। लेकिन आपको सामग्री को स्वयं जांचने की आवश्यकता नहीं है। आप ईटाग (यदि सादा HTTP का उपयोग कर रहे हैं) की जांच कर सकते हैं या आप BlobProperties.LastModifiedUtc देख सकते हैं यदि आप एपीआई का उपयोग कर रहे हैं।

+0

ठीक है, मैंने यही सोचा था। अगर यह पुश अधिसूचना प्रकार की चीज़ थी तो यह अच्छा नहीं होगा ...? –

+0

@ बिलफॉर्नी शायद हां, लेकिन कंटेनर के संभावित असीमित आकार और इसकी पूरी वितरित प्रकृति पर विचार करना, इसे करने और अच्छी तरह से स्केल करने और बुनियादी ढांचे को मारने के लिए तुच्छ नहीं है। –

+0

क्या यह मानने के लिए 100% सुरक्षित है कि केवल ब्लॉबप्रॉपर्टीज़ को जांचने के मामले में। किसी कंटेनर के LastModifiedUtc फ़ील्ड में आप कभी भी परिवर्तन नहीं खो देंगे? उदाहरण के लिए कोई समस्या नहीं हो सकती है अगर ब्लॉब पर एक विशाल कंटेनर को स्टोर करने के लिए एकाधिक मशीनों का उपयोग किया जाता है, तो कोई घटना नहीं हो सकती है जब "अतीत में संशोधन" होगा? – hpityu

0

क्या एज़ूर स्टोरेज एनालिटिक्स आवश्यक जानकारी रखते हैं? आपको अभी भी मतदान करने के लिए कुछ चाहिए।

1

मान लें कि आपके पास ब्लॉब को अद्यतन/परिवर्तित करने वाले कोड पर नियंत्रण है, तो जब भी ब्लॉब बार-बार मतदान की आवश्यकता से परहेज करता है तो पुश अधिसूचना उत्पन्न करने के लिए आप सिग्नलआर का उपयोग कर सकते हैं।