2011-08-15 11 views
5

मैं स्कैला डीबी ढांचे/रैपर का शोध कर रहा था, और ट्विटर से गिजार्ड में आया था। जब मैं पहली बार प्रभावित हुआ, तो मैंने प्रतिबंध को पढ़ते समय ठंडा कर दिया। वे कहते हैं कि आपके द्वारा किए गए सभी डीबी संचालन दोनों बेवकूफ और कम्यूटेटिव होना चाहिए। अगर मैं ठीक से समझता हूं, तो यह मूल रूप से लगभग कुछ भी नहीं छोड़ा जाता है। उदाहरण के तौर पर, यदि मेरे पास एक पूर्णांक काउंटर वाला एक इकाई है, और इसे बढ़ाया जाना है। मैं या तो "वृद्धि" ऑपरेशन, या "सेट" ऑपरेशन का उपयोग कर सकता हूं। लेकिन वृद्धि बेवकूफ नहीं होगी (यदि आप इसे दो बार चलाते हैं, तो आप एक अलग परिणाम प्राप्त करते हैं और फिर इसे एक बार चलाते हैं), और सेट कम्यूटिव नहीं होगा (पहले 5 सेट करना और फिर 2 अलग-अलग परिणाम देता है और फिर पहले दो सेट करता है और फिर 5)। तो क्या "डालने-अनुपस्थित" से अलग कुछ भी बचा है, जो अधिकांश उपयोग-मामलों के लिए बहुत उपयोगी नहीं है। एक वितरित डेटाबेस ढांचे का बिंदु क्या है जो इतनी बाध्य है कि आप मूल रूप से इसके साथ कुछ भी उपयोगी नहीं कर सकते हैं? मुझे कुछ महत्वपूर्ण याद आना चाहिए।एक ही समय में किस प्रकार के डीबी ऑपरेशंस "बेवकूफ और कम्यूटिव" दोनों हैं?

[संपादित करें] इसके अलावा "डालने-अगर-अनुपस्थित" (और "हटाएँ-अगर-वर्तमान"), मुझे लगता है कि "की तुलना-टाइमस्टैम्प और सेट" दोनों idempotent और विनिमेय हो सकता है, यदि परिवर्तन कर रहे हैं को छोड़ने के बजाय कतारबद्ध, जब "पिछले परिवर्तन" अभी भी गायब हैं। लेकिन मुझे नहीं पता कि कोई डीबी इसे लागू करता है या नहीं।

उत्तर

3

कम्यूटिव ऑपरेशंस केवल ऐसे ऑपरेशन हैं जो एक मूल्य को एकान्त रूप से विकसित करने का कारण बनते हैं। के idempotent उदाहरण कहा संचालन कर रहे हैं:

  • एक सेट में तत्वों को सम्मिलित,
  • एक मूल्य सेट एक नंबर और पिछला मान की अधिकतम हो सकता है,
6

आम तौर पर, बेवकूफ कार्यों को अभिनय से पहले राज्य की जांच करनी चाहिए। जब डेटाबेस अपडेट के संदर्भ में लागू किया जाता है, तो इसका मतलब है कि अद्यतन करने से पहले डेटा की स्थिति को बदलना है। उदाहरण के लिए:

update some_table set 
some_column = 'some_new_value' 
where id = 123 
and some_column = 'its_current_value'; -- idempotent check 

यदि यह दो बार का संचालन किया गया दूसरी कॉल कुछ भी नहीं करना होगा।

कम्यूटिव होने के लिए, दो अपडेटों को डेटा स्थिति (विभिन्न कॉलम/पंक्तियों) के विभिन्न पहलुओं को प्रभावित करने की आवश्यकता होगी। यही है, प्रत्येक idempotent जांच की वैधता अन्य कमांड की अद्यतन कार्रवाई से प्रभावित नहीं होना चाहिए।

+0

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