2012-02-20 14 views
21

पर परमाणु काउंटर मैं अपने आवेदन में Amazon DynamoDB का उपयोग करने पर विचार कर रहा था, और मेरे पास atomic counters विश्वसनीयता के बारे में कोई प्रश्न है।डायनेमो डीबी

मैं एक वितरित अनुप्रयोग है कि समवर्ती, और की जरूरत का निर्माण कर रहा हूँ लगातार, वेतन वृद्धि/एक डायनमो की विशेषता में संग्रहीत एक काउंटर घटती। मैं सोच रहा था कि डायनेमो का परमाणु काउंटर एक भारी समवर्ती माहौल में कितना भरोसेमंद है, जहां समेकन स्तर बहुत अधिक है (उदाहरण के लिए, 20k समवर्ती हिट की औसत दर - विचार प्राप्त करने के लिए, यह लगभग 52 अरब होगा प्रति माह वेतन वृद्धि/कमी)।

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

धन्यवाद

उत्तर

16

DynamoDB यह कई सर्वरों के पार कुंजी विभाजित करके गुण स्केलिंग है हो जाता है। यह कैसंड्रा और एचबीएस स्केल जैसे अन्य वितरित डेटाबेस के समान है। जबकि आप डायनेमोड डीबी पर थ्रूपुट बढ़ा सकते हैं जो आपके डेटा को एकाधिक सर्वर पर ले जाता है और अब प्रत्येक सर्वर कुल समवर्ती कनेक्शन/सर्वरों की संख्या को संभाल सकता है। अधिकतम थ्रूपुट (http://aws.amazon.com/dynamodb/faqs/#Will_I_always_be_able_to_achieve_my_level_of_provisioned_throughput)

का अर्थ यह है कि एक कुंजी जो सीधे बढ़ी है, उसे स्केल नहीं किया जाएगा क्योंकि उस कुंजी को एक सर्वर पर लाइव होना चाहिए, इस बारे में स्पष्टीकरण के लिए उनके अक्सर पूछे जाने वाले प्रश्न देखें। इस समस्या को संभालने के अन्य तरीके हैं, उदाहरण के लिए डायनेमोडीबी (हालांकि इसमें विश्वसनीयता समस्याएं हो सकती हैं) या एक शर्मीली काउंटर के साथ मेमोरी एकत्रीकरण में जहां कई कुंजी पर वृद्धि हुई है और सभी चाबियों को sharded में वापस खींचकर वापस पढ़ें काउंटर (http://whynosql.com/scaling-distributed-counters/)।

+2

दुर्भाग्य से लिंक रोट दूसरे लिंक – Luke

8

scalability के बारे में gigq के जवाब के अलावा, DynamoDBs परमाणु वेतन वृद्धि idempotent नहीं कर रहे हैं और इसलिए विश्वसनीय नहीं हैं: कनेक्शन एक UpdateItemADD अनुरोध जारी करने के बाद चला जाता है, तो आप जानते हुए भी अगर ऐड हामी भर दी थी या नहीं का कोई रास्ता नहीं है, तो आप नहीं जानते कि आपको पुनः प्रयास करना चाहिए या नहीं।

डायनेमोडीबी सशर्त अपडेट सिस्टम को कम स्केलेबल बनाने की लागत पर इसे ठीक करते हैं, क्योंकि आपको हर बार फिर से प्रयास करना होता है, एक बार त्रुटि की अनुपस्थिति में, विशेषता में दो बदलावों का प्रयास किया जाता है।

+0

पर इस उत्तर के लिए सेट किया गया है डायनेमो डीबी सशर्त अपडेट इसे ठीक करें, वास्तव में नहीं: अगर क्लाइंट को नेटवर्क त्रुटि होती है तो लिखने पर लागू होता है लेकिन इससे पहले कि यह ग्राहक को क्या करना चाहिए ? – aaaristo

+0

दस्तावेज़ कहते हैं कि इसे पुनः प्रयास करना चाहिए क्योंकि सशर्त अपडेट बेवकूफ हैं, लेकिन मैं सहमत नहीं हूं। जैसे क्लाइंट एक काउंटर पढ़ता है, इसका मान 10 है और इसे 1 तक बढ़ाया जाना चाहिए। यह पहला कॉल करता है: यदि उसका मान 10 है तो काउंटर को 11 पर सेट करें। अपडेट निष्पादित किया गया है और कनेक्शन ड्रॉप हो जाता है। ग्राहक नेटवर्क अपवाद और पुनः प्रयास करता है: स्थिति गलत है। तब ग्राहक को पता नहीं है कि इसे 11 से 1 तक बढ़ाने की कोशिश करनी चाहिए या नहीं: समस्या यह है कि ** यदि नेटवर्क त्रुटि होती है तो ग्राहक के पास अपनी वृद्धि और दूसरों द्वारा किए गए एक वृद्धि के बीच अंतर करने का कोई तरीका नहीं है * * – collimarco

+0

क्या होगा यदि आपने अपडेट स्टेटमेंट से 'रिटर्नवैल्यू' का उपयोग किया है? एक बार अपडेट होने के बाद आपको मूल्य मिल जाता है। वापसी मूल्य दृढ़ता से संगत है। फिर आपको पढ़ने की जरूरत नहीं है, और फिर अद्यतन करें। यदि आपका नेटवर्क गिरता है, तो आप पुनः प्रयास करें। सबसे खराब मामला आप अनुक्रम में एक संख्या छोड़ते हैं। http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html#DDB-UpdateItem-request-ReturnValues – blo0p3r

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