2012-05-07 17 views
6

मैं वर्तमान में एक नोड ऐप लिख रहा हूं और मैं स्केलिंग में आगे सोच रहा हूं। जैसा कि मैं समझता हूं, क्षैतिज स्केलिंग अधिक समवर्ती अनुरोधों को संभालने के लिए किसी एप्लिकेशन को स्केल करने के आसान तरीकों में से एक है। मेरी कामकाजी प्रति वर्तमान में बैकएंड पर मोंगो डीबी का उपयोग करती है।एक डेटाबेस के साथ एकाधिक नोड उदाहरण

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

उदाहरण देने के लिए: इस सूची वाले सर्वर की कल्पना करें-> बी। इंस्टेंस 1 ऑब्जेक्ट सी के साथ आता है और इंस्टेंस 2 ऑब्जेक्ट डी के साथ आता है। यह संभव है कि एक दौड़ की स्थिति है जिसमें दोनों उदाहरण एक-> बी पढ़ते हैं और सूची में अपनी वस्तुओं को जोड़ने का फैसला करते हैं। उदाहरण 1 में कल्पना की जाएगी कि यह ए-> बी-> सी होने का सम्मिलन होगा जबकि उदाहरण 2 लगता है कि यह एक-> b-> d है जब डेटाबेस वास्तव में एक-> b-> c-> d रखता है।

सामान्यतः, यह आशावादी लॉकिंग के लिए नौकरी की तरह लगता है, हालांकि, जैसा कि मैं समझता हूं, न तो मोंगोडीबी या रेडिस (अन्य डेटाबेस जिसे मैं विचार कर रहा हूं) एसक्यूएल तरीके से लेनदेन करता है।

इसलिए मैं सोच भी समाधान नीचे से एक होने की:

  1. झंडे का उपयोग कर MongoDB में अपने खुद के लेन-देन को लागू करें। क्लाइंट लॉक वैरिएबल पर एक ढूँढें और मॉडोडिफाइज़ करता है और यदि सफल होता है, तो ऑपरेशन करता है। यदि असफल, क्लाइंट एक निश्चित टाइमआउट के बाद पुनः प्रयास करता है।

  2. उसी प्रभाव को प्राप्त करने के लिए रेडिस लेनदेन और पबब का उपयोग करें। मुझे बिल्कुल यकीन नहीं है कि यह अभी तक कैसे करें, लेकिन ऐसा लगता है जैसे यह संभव हो सकता है।

  3. कुछ प्रकार के स्मार्ट लोड संतुलन को लागू करें। यदि एकाधिक ग्राहक एक ही आइटम पर काम कर रहे हैं, तो उन्हें उसी उदाहरण पर रूट करें। चूंकि जेएस एकल थ्रेडेड है, इसलिए समस्या हल हो जाएगी। दुर्भाग्यवश, मुझे उसमें एक सीधा समाधान नहीं मिला।

मुझे यकीन है कि ऊपर प्राप्त करने के लिए एक बेहतर, अधिक सुरुचिपूर्ण तरीका मौजूद है, और मुझे कोई समाधान या सुझाव सुनना अच्छा लगेगा। धन्यवाद!

+3

+1 सिर्फ Node.js प्रयोग करने के लिए + MongoDB –

+0

इसके अलावा neo4j को देखो आप डेटा अधिक दस्तावेजों का एक सेट की तुलना में एक ग्राफ की तरह लग रही है, तो ... –

+0

धन्यवाद :) मुझे लगता है कि इस पर एक नज़र भी ले लेंगे । – johncch

उत्तर

0

यदि मैं सही ढंग से समझ गया, और सूची एक ही दस्तावेज़ के रूप में संग्रहीत की जा रही है, तो आप पंक्ति संस्करण को देख रहे हैं। तो दस्तावेज़ में एक संपत्ति है कि संस्करण संभाल लेंगे जोड़ने के लिए, जब आप अद्यतन, आप वृद्धि (या परिवर्तन) संस्करण तथा किए जाने वाले कि एक सशर्त अद्यतन:

// अद्यतन (स्थिति, मूल्य)

अद्यतन ({संस्करण: जो कुछ भी आपने प्राप्त किया है, जब आप DidFind}, newValue)

उम्मीद है कि यह मदद करता है। गस

0

आप mongodb पर findAndModify कमांड चाहते हैं जो नए संशोधित दस्तावेज़ को लौटते समय परमाणु संशोधन की गारंटी देगा। परिवर्तन कर रहे हैं के रूप में धारावाहिक और परमाणु उदाहरण 1 होगा a-> बी> ग और उदाहरण 2 होगा a-> बी> ग> घ

चीयर्स

+0

दुर्भाग्य से मुझे आदेशों को खोजने और संशोधित करने के बीच कुछ प्रसंस्करण करने की आवश्यकता होगी, ऐसा लगता है कि इस मोंगो एपीआई का उपयोग करना संभव नहीं होगा? – johncch

0

सब आप कर रहे हैं नया जोड़ने है सूची में तत्व, आप एक रेडिस सूची का उपयोग कर सकते हैं और आपके द्वारा जोड़े गए प्रत्येक मूल्य में समय शामिल कर सकते हैं। सूची को रेडिस पर छोड़ा जा सकता है लेकिन पुनर्प्राप्त होने पर त्वरित रूप से क्रमबद्ध होना चाहिए।

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