क्या SQL Server और Mongo को एक साथ उपयोग किया जा सकता है?


14

हमारे पास एक बड़ी समाचार-उन्मुख साइट है जिसमें उच्च वेब ट्रैफ़िक है। वास्तुकला आपके अक्सर देखे जाने वाले DB - रेपो लेयर - सर्विसेज लेयर - Asp.Net MVC है। समस्या जो हम देख रहे हैं वह पढ़ने के प्रदर्शन के आसपास है। यह पता चलता है कि यह सभी डीडीडी डोमेन ऑब्जेक्ट सामान महान है, सिद्धांत रूप में, व्यावसायिक नियमों के लिए, लेकिन जब यह पढ़ने के प्रदर्शन को अनुकूलित करने की बात आती है, तो जीवन को कठिन बना दिया है।

एक समाधान के रूप में, मैं कुछ नया (हमारे लिए) पर विचार कर रहा हूं: noSQL का उपयोग करना। मैं हमारी वेबसाइट पर प्रस्तुत किए जा रहे डेटा के लिए एक noSQL डेटाबेस का उपयोग करना चाहता हूं। हम अपने एसक्यूएल सर्वर से छुटकारा नहीं पा सकते हैं (कम से कम कभी भी जल्द ही नहीं), लेकिन यह मुझे लगता है कि सभी नए विकास के लिए मानगो को क्वेरी डेटाबेस के रूप में उपयोग करने के लिए एक व्यावहारिक कदम होगा।

मेरा सवाल यह है कि क्या एसक्यूएल सर्वर को रिकॉर्ड के अपने डेटाबेस के रूप में और मोंगो को आपके क्वेरी डेटाबेस के रूप में एक साथ उपयोग करना संभव है ?

इसलिए जब हमारे संपादकों में से कोई एक रिकॉर्ड अपडेट करता है, तो डेटा SQL सर्वर में संग्रहीत किया जाएगा। यह आवश्यक है, क्योंकि बहुत अधिक विरासत कोड है जिसे रातोंरात दोबारा नहीं लिखा जा सकता है।

लेकिन जब वेब साइट पर कोई दर्शक किसी लेख या लेखों की सूची देखता है, तो मैं मोंगो बनाम एसक्यूएल सर्वर के प्रदर्शन का लाभ उठाना चाहूंगा। डेटा को कुछ हद तक चालू रखने के लिए, मान लें कि 15 मिनट या उससे कम है, SQL सर्वर डेटा को मैंगो को रीफ्रेश करने की आवश्यकता होगी। RDBMS में इस तरह के संचालन के लिए प्रतिकृति उपकरण हैं और यदि SQL सर्वर से मैंगो तक कुछ भी करने के लिए मौजूद है तो मुझे आश्चर्य हो रहा है। Lync सर्वर, हो सकता है?


3
मुमकिन? बेशक, यह संभव है, दो अलग-अलग डेटा स्टोर के रूप में। तुम यहाँ क्या पूछ रहे हो?
ओडेड

लेकिन क्या आप उन्हें एक साथ उपयोग कर सकते हैं? मूल रूप से डीबीओ डीबी के साथ डेटा के लिए मूल रूप से केवल-पढ़ने के लिए कैश के रूप में कार्य करता है?
जॉन

1
फिर, निश्चित रूप से आप "उन्हें एक साथ उपयोग कर सकते हैं"। लेकिन यह स्पष्ट नहीं है कि इसका क्या मतलब है। जब तक आपके पास मूंगो के लिए किसी प्रकार का अद्यतन तंत्र है, आप जाने के लिए अच्छे हैं। उदी दहन की पोस्ट देखें - लेकिन यह तंत्र को परिभाषित करने के लिए आप पर निर्भर है।
ओडेड

1
हमने MongoDB पर कभी कदम नहीं रखा, हालांकि यह अगले साल की तरह दिखता है कि हम हो सकते हैं। एक संक्रमणकालीन तरीका जो हमने किया है वह JSON को varchar फ़ील्ड में संग्रहीत करना है। मेरे द्वारा पढ़ी गई हर चीज से, NoSQL और SQL के बीच डेटा को आगे और पीछे ले जाने का कोई अच्छा तरीका नहीं है - यह सब कस्टम होने की आवश्यकता है, विशेष रूप से NoSQL डेटाबेस के बाद से जो वहाँ हैं वे बहुत भिन्न होते हैं कि वे कैसे काम करते हैं ।
जॉन

1
@ जॉन यदि आप संबंधपरक के साथ रहना चाहते हैं और SQL सर्वर से दूर जाने के इच्छुक हैं, तो आप Postgresql और इसके json एकीकरण को देखना चाहते हैं । इस प्रकार, डेटा को एक जोंस कॉलम में संग्रहीत किया जाता है जिसे तब डेटाबेस के भीतर हेरफेर किया जा सकता है।

जवाबों:


13

आप एक ऐसी समस्या में भाग ले चुके हैं, जो आपके सामने है ... पढ़ने के लिए अनुकूलित एक डेटाबेस लेखन दक्षता और इसके विपरीत के लिए बहुत अच्छा है। एक दृष्टिकोण जो इस पढ़ने-लिखने की बाधा से विकसित हुआ है, वह है CQRS (कमांड क्वेरी रिस्पांसिबिलिटी सेग्रीगेशन)। विकिपीडिया को दोनों को एक साथ जोड़ने के बावजूद CQRS और CQS तकनीकी रूप से भिन्न हैं। CQS सिर्फ यह मांग करता है कि एक विधि या तो एक बदलाव (कमांड) करे या जानकारी (प्रश्न) दोनों को कभी न पूछे।

CQRS इसे एक कदम आगे ले जाता है और निर्दिष्ट करता है कि आपके पास क्वेरी और कमांड के लिए एक अलग मॉडल है। यह एकल चरण आपके रीड और राइट डेटाबेस को अलग करने जैसी चीजों को सक्षम बनाता है। जो आप करना चाहते हैं।

मैं यह नहीं कह सकता कि मैं Mongo का विशेषज्ञ हूं या SQL सर्वर के साथ काम करने के लिए इसे कॉन्फ़िगर कर रहा हूं। लेकिन मेरी समझ से, लोग मोंगो को अपने लेन-देन डेटाबेस के एक असामान्य दृष्टिकोण के रूप में उपयोग करते हैं। Transactional db से Mong को अपडेट करने पर SQL एजेंट चलाने में कमी आ सकती है। या डेटाबेस को प्रदूषित करने के लिए एक अलग सेवा होना।

एक बेहतर विकल्प यह भी होगा कि जब भी कोई अपडेट किया जाए, तो आपकी कमांड सर्विस एक इवेंट में आग लगा दे। फिर आपके पास एक ऐसी सेवा होगी जो उस घटना को सुनती है और उस जानकारी के साथ MongoDB को अपडेट करती है। ईवेंट सोर्सिंग (पेज पर ईवेंट सोर्सिंग के लिए खोज) के लिए मूल दृष्टिकोण है ।

ग्रेग यंग, ​​डीडीडी दुनिया में एक विचारशील नेता वर्तमान में CQRS पर फाउलर सिग्नेचर सीरीज में एक पुस्तक लिख रहे हैं, जिसे इवेंट-सेंट्रिक कहा जाता है (इसे CQRS कहा जाता था)। फाउलर ने अपनी ब्लिकी पर एक पोस्ट लिखकर दृष्टिकोण का वर्णन किया है


+1 CQRS यहां अच्छी तरह से फिट बैठता है। अपने विचारों के निर्माण के लिए उपयोग किए जाने वाले दस्तावेज़ डेटाबेस को पॉप्युलेट और अपडेट करने के लिए घटनाओं का उपयोग करें और अपने sql डेटाबेस को वैसे ही छोड़ दें।
क्वेंटिन-स्टारिन

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

1
इस उत्तर में केवल एक चीज जोड़ूंगा: यदि आपका उपयोग मामला विशेष रूप से MS SQL और MVC के साथ उपयोग करने के आसपास है, तो क्या आपने NoSQL हिस्से के लिए MongoDB के बजाय BrightstarDB पर विचार किया है ? इसमें Entity Framework और LINQ संगतता है, जो आपके लिए संक्रमण को कम कर सकता है।
क्रेजीप्रो

1

हाँ। मेरे वर्तमान प्रोजेक्ट पर, हमें डेटा मिल रहा है और इसे SQL सर्वर में संग्रहीत किया जा रहा है, और फिर ल्यूसिने / सोलर का उपयोग करके खोज इंडेक्स का निर्माण कर रहे हैं और उन में MongoDB को संग्रहीत कर रहे हैं। MongoDB को पॉपुलेट करना एक कस्टम लोडर के साथ किया जाता है, हालांकि - कोई SQL सर्वर प्रतिकृति या स्वत: ताज़ा नहीं।


ठीक है, मैं अभी उत्सुक हूँ, क्यों न सीधे मानगो को आबाद किया जाए? आप दोनों का उपयोग करने के लिए एक ही बाधा के अधीन हैं ?
यति सगड़े

हमारे मौजूदा SQL सर्वर को रातोंरात दोबारा नहीं लिखा जा सकता है। मेरा विचार है कि यह एक छोटा, लेकिन उपयोगी बेबी स्टेप है।
जॉन

@yatisagade: सही है। हमारे पास ऐसी रिपोर्टें हैं जो SQL सर्वर के खिलाफ चल रही हैं, लेकिन हमारे पास एक वैश्विक खोज ऐप है जो Lucene अनुक्रमित का उपयोग करता है।
TMN
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.