2012-09-01 14 views
9

में एक वितरित कतार लिखना मैं पाइथन का उपयोग करके उच्च रिज़ॉल्यूशन छवियों (कई मिलियन) की एक बड़ी निर्देशिका को थंबनेल में परिवर्तित करना चाहता हूं। मेरे पास एक डायनेमोडीबी टेबल है जो S3 में प्रत्येक छवि का स्थान संग्रहीत करती है।अमेज़ॅन के डायनेमो डीबी

इन ईसी 2 इंस्टेंस पर इन सभी छवियों को संसाधित करने के बजाय (सप्ताह लगेंगे) मैं उदाहरणों के समूह का उपयोग करके एक वितरित एप्लिकेशन लिखना चाहता हूं।

मैं कतार लिखने के लिए किस तकनीक का उपयोग कर सकता हूं जो किसी नोड को डेटाबेस से किसी छवि को "चेक आउट" करने, इसे आकार देने, और जेनरेट किए गए थंबनेल के नए आयामों के साथ डेटाबेस को अपडेट करने की अनुमति देगा?

विशेष रूप से मैं परमाणुता और समरूपता के बारे में चिंतित हूं - मैं दो नोड्स को उसी समय एक ही नौकरी की जांच करने से कैसे रोक सकता हूं जिसमें डायनेमो डीबी है?

उत्तर

10

डायनेमो डीबी के संयोजन के साथ Amazon's Simple Queue Service(SQS) का उपयोग करने के लिए आप एक दृष्टिकोण ले सकते हैं। तो आप क्या कर सकते हैं कतार में संदेश लिखना जिसमें डायनेमो डीबी में छवि प्रविष्टि की हैश कुंजी जैसी कुछ है। प्रत्येक उदाहरण समय-समय पर कतार की जांच करेगा और संदेश बंद कर देगा। जब एक उदाहरण कतार से एक संदेश पकड़ लेता है, तो यह किसी अन्य समय के लिए अन्य उदाहरणों के लिए अदृश्य हो जाता है। फिर आप छवि को देख और संसाधित कर सकते हैं और कतार से संदेश हटा सकते हैं। अगर किसी कारण से छवि को संसाधित करने में कुछ गड़बड़ हो जाती है, तो संदेश हटाया नहीं जाएगा और यह अन्य उदाहरणों को पकड़ने के लिए दिखाई देगा।

एक और, अधिक जटिल, दृष्टिकोण लॉकिंग योजना को लागू करने के लिए डायनेमोडीबी के conditional update mechanism का उपयोग करना होगा। उदाहरण के लिए, आप अपने डेटा मॉडल में 'जा रहे प्रसंस्कृत' विशेषता को जोड़ सकते हैं, या तो 0 या 1 है। उदाहरण के लिए पहली बात यह है कि इस कॉलम पर एक सशर्त अपडेट किया गया है, मान को 1 से बदलकर प्रारंभिक मान है 0. इसे उचित/मजबूत लॉकिंग तंत्र बनाने के लिए यहां और अधिक करना है ....

+0

डायनेमोडीबी नौकरी के लिए गलत उपकरण है। प्रक्रिया बहुत सरल डब्ल्यू/एसक्यूएस है। 1।डायनेमो डीबी = लार्ज इमेज लोकेशन> एसक्यूएस; एसक्यूएस = प्रक्रिया> एन * ईसी 2 = अपडेटलोकेशन> डायनेमो डीबी –

+1

वाक्य "एसक्यूएस ने एक ही संदेश को पढ़ने से कई उदाहरणों को रोकने के लिए तंत्र में बनाया है" थोड़ा भ्रामक है। कोई "केवल-बार" गारंटी नहीं है। मैं देखता हूं कि आप डायनेमो डीबी के साथ लॉकिंग समाधान का वर्णन करते हैं, लेकिन उपरोक्त कथन को बेहतर ढंग से हटा दें। –

+0

ध्यान दें कि एसक्यूएस एचआईपीएए अनुपालन नहीं है, इसलिए अगर आपको एसक्यूएस संदेश में कुछ जानकारी स्टोर करने की अनुमति नहीं है तो nstehr सुझाव एक बहुत व्यवहार्य समाधान हो सकता है। –

0

इस के लिए ईएमआर का उपयोग करने के लिए एक अच्छा/अच्छा दृष्टिकोण है। HIVE से DynamoDB को कनेक्ट करने के लिए ईएमआर में एक इंटर-कनेक्शन परत है। फिर आप अपनी तालिका के माध्यम से लगभग एक एसक्यूएल के साथ चल सकते हैं और अपने परिचालन कर सकते हैं।

के लिए यह यहाँ एक सुंदर अच्छा मार्गदर्शक है: http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.html

आयात/निर्यात के लिए यह

लेकिन आसानी से अनुकूलित किया जा सकता।

0

हाल ही में, DynamoDB समानांतर स्कैन जारी किया: http://aws.typepad.com/aws/2013/05/amazon-dynamodb-parallel-scans-and-other-good-news.html

अब, 10 मेजबान एक ही समय में एक ही मेज से पढ़ सकते हैं, और DynamoDB की गारंटी देता है कि वे एक ही आइटम नहीं देख सकेंगे।

2

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

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/JavaVersionSupportHLAPI.html

मैं जानता हूँ कि यह एक पुराने सवाल है, तो यह जवाब मूल पोस्टर से समुदाय के लिए अधिक है।

+0

डायनेमो का उपयोग इस तरह से होता है अगर आपकी प्रक्रिया के माध्यम से मिडवे के माध्यम से मर जाता है और प्रगति ध्वज कभी खत्म नहीं हो जाता है। – Chaos

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