NoSQL डेटा स्टोर का उपयोग करके आपको किन स्केलेबिलिटी समस्याओं का सामना करना पड़ा है? [बन्द है]


189

NoSQL गैर-संबंधपरक डेटा स्टोर को संदर्भित करता है जो रिलेशनल डेटाबेस और ACID गारंटी के इतिहास के साथ टूटता है। लोकप्रिय ओपन सोर्स NoSQL डेटा स्टोर में शामिल हैं:

  • कैसेंड्रा (सारणीबद्ध, जावा में लिखा, सिस्को, वेबएक्स, डीग, फेसबुक, आईबीएम, महलो, रैकस्पेस, रेडिट और ट्विटर द्वारा उपयोग किया गया)
  • काउचबडी (दस्तावेज, एरलांग में लिखा गया है, बीबीसी और इंजन यार्ड द्वारा प्रयुक्त)
  • डायनामाइट (कुंजी-मान, एर्लांग में लिखा गया है, जिसका उपयोग पॉवर्स द्वारा किया गया है)
  • HBase (कुंजी-मूल्य, जावा में लिखित, बिंग द्वारा उपयोग किया जाता है)
  • हाइपरटेबल (Baidu द्वारा प्रयुक्त C ++ में लिखा गया सारणीबद्ध)
  • काई (की-वैल्यू, एरलांग में लिखी गई)
  • मेम्चेचेबीडी (कुंजी-मूल्य, सी में लिखा गया है, जिसका उपयोग रेडिट द्वारा किया गया है)
  • MongoDB (दस्तावेज़, C ++ में लिखा गया है, जिसका उपयोग इलेक्ट्रॉनिक आर्ट्स, जीथब, एनवाई टाइम्स और सोर्सफोर्ज द्वारा किया जाता है)
  • Neo4j (ग्राफ, जावा में लिखा गया, कुछ स्वीडिश विश्वविद्यालयों द्वारा उपयोग किया गया)
  • प्रोजेक्ट वोल्डेमॉर्ट (कुंजी-मूल्य, जावा में लिखा है, लिंक्डइन द्वारा उपयोग किया जाता है)
  • रेडिस (कुंजी-मूल्य, सी में लिखा गया, जिसका उपयोग क्रेग्सलिस्ट, इंजन यार्ड और जीथब द्वारा किया गया है)
  • Riak (कुंजी-मूल्य, Erlang में लिखा गया है, जिसका उपयोग Comcast और Mochi Media द्वारा किया गया है)
  • रिंगो (कुंजी-मान, एरलांग में लिखा गया, नोकिया द्वारा उपयोग किया गया)
  • स्केलेरिस (कुंजी-मान, एरलांग में लिखा गया है, जो ऑनस्केल द्वारा उपयोग किया जाता है)
  • टेरास्टोर (दस्तावेज, जावा में लिखा गया)
  • ThruDB (दस्तावेज़, C ++ में लिखित, JunkDepot.com द्वारा उपयोग किया गया)
  • टोक्यो कैबिनेट / टोक्यो तानाशाह (कुंजी-मूल्य, सी में लिखा है, मिक्सी.जेपी द्वारा उपयोग किया जाता है (जापानी सोशल नेटवर्किंग साइट)

मैं आपको विशिष्ट समस्याओं के बारे में जानना चाहता हूं - एसओ रीडर - ने डेटा स्टोर और आपके द्वारा उपयोग किए गए NoSQL डेटा स्टोर का उपयोग करके हल किया है।

प्रशन:

  • किन स्केलेबिलिटी समस्याओं के समाधान के लिए आपने NoSQL डेटा स्टोर का उपयोग किया है?
  • NoSQL डेटा स्टोर का आपने क्या उपयोग किया?
  • NoSQL डेटा स्टोर पर स्विच करने से पहले आपने किस डेटाबेस का उपयोग किया था?

मैं पहले हाथ के अनुभवों की तलाश में हूं, इसलिए कृपया जवाब न दें जब तक कि आपके पास ऐसा न हो।


6
bignose: मैं बाउंटी को अपनी 550 प्रतिष्ठा वाली टिप के रूप में देखता हूं जो सबसे अधिक जानकारीपूर्ण उत्तर देने वाले व्यक्ति को दिया गया है :-)
knorv

1
जेमस्टोन / एस - एक स्मॉलटाक ऑब्जेक्ट स्टोर जैसे समाधान मत भूलना।
रैंडल श्वार्ट्ज

2
OrientDB ( Oriechnologies.com ) को याद न करें
15:01 बजे

जवाबों:


49

मैंने MySQL से CouchDB तक एक छोटा सबप्रोजेक्ट स्विच किया है, ताकि भार को संभालने में सक्षम हो। परिणाम आश्चर्यजनक था।

लगभग 2 साल पहले, हमने http://www.ubuntuusers.de/ (जो संभवतः सबसे बड़ी जर्मन लिनक्स सामुदायिक वेबसाइट है) पर एक स्व-लिखित सॉफ्टवेयर जारी किया है । साइट पायथन में लिखी गई है और हमने एक WSGI मिडलवेयर जोड़ा है जो सभी अपवादों को पकड़ने और उन्हें एक अन्य छोटी MySQL संचालित वेबसाइट पर भेजने में सक्षम था। इस छोटी सी वेबसाइट ने अलग-अलग बग्स को निर्धारित करने के लिए एक हैश का इस्तेमाल किया और घटनाओं की संख्या और पिछली घटना को भी संग्रहीत किया।

दुर्भाग्य से, रिलीज़ होने के तुरंत बाद, ट्रेसबैक-लॉगर वेबसाइट अब जवाब नहीं दे रही थी। हमारे मुख्य साइट के उत्पादन db के साथ कुछ लॉकिंग मुद्दे थे जो लगभग हर अनुरोध के साथ-साथ कई अन्य बगों को भी फेंक रहे थे, जिन्हें हमने परीक्षण चरण के दौरान पता नहीं लगाया। हमारी मुख्य साइट का सर्वर क्लस्टर, जिसे ट्रेसबैक-लॉगर सबमिट पेज प्रति सेकंड कई बार प्रस्तुत किया जाता है। और यह छोटे सर्वर के लिए बहुत अधिक था जो ट्रेसबैक लॉगर की मेजबानी करता था (यह पहले से ही एक पुराना सर्वर था, जिसका उपयोग केवल विकास के उद्देश्य के लिए किया गया था)।

इस समय CouchDB बल्कि लोकप्रिय था, और इसलिए मैंने इसे आज़माने और इसके साथ एक छोटी ट्रेसबैक-लकड़हारा लिखने का फैसला किया। नए लकड़हारे में केवल एक ही अजगर फ़ाइल शामिल थी, जो छँटाई और फ़िल्टर विकल्पों और एक सबमिट पृष्ठ के साथ एक बग सूची प्रदान करती थी। और पृष्ठभूमि में मैंने CouchDB प्रक्रिया शुरू की है। नए सॉफ़्टवेयर ने सभी अनुरोधों पर बहुत तेज़ी से प्रतिक्रिया दी और हम स्वचालित बग रिपोर्ट की भारी मात्रा में देखने में सक्षम थे।

एक दिलचस्प बात यह है कि इससे पहले कि समाधान एक पुराने समर्पित सर्वर पर चल रहा था, जहां दूसरी तरफ नई CouchDB आधारित साइट केवल बहुत सीमित संसाधनों के साथ एक साझा एक्सईएन उदाहरण पर चल रही थी। और मैंने क्षैतिज रूप से स्केल करने के लिए की-वैल्यू स्टोर की ताकत का उपयोग नहीं किया है। कुछ भी लॉक किए बिना समवर्ती अनुरोधों को संभालने के लिए CouchDB / Erlang OTP की क्षमता पहले से ही जरूरतों को पूरा करने के लिए पर्याप्त थी।

अब, जल्दी से लिखा गया CouchDB-ट्रेसबैक लकड़हारा अभी भी चल रहा है और मुख्य वेबसाइट पर बग का पता लगाने के लिए एक उपयोगी तरीका है। वैसे भी, महीने में लगभग एक बार डेटाबेस बहुत बड़ा हो जाता है और काउचडीबी प्रक्रिया मार जाती है। लेकिन फिर, CouchDB की कॉम्पैक्ट-डीबी कमांड कई जीबी से आकार को फिर से कुछ केबी तक कम कर देता है और डेटाबेस ऊपर और फिर से चल रहा है (शायद मुझे वहां क्रोनजोब जोड़ने पर विचार करना चाहिए ... 0o)।

सारांश में, इस उपप्रोजेक्ट के लिए CouchDB निश्चित रूप से सबसे अच्छा विकल्प था (या कम से कम एक बेहतर विकल्प MySQL) और यह अपना काम अच्छी तरह से करता है।


मुझे लगता है कि मैंने कहीं पढ़ा है कि आप
couchdb

50

मेरी वर्तमान परियोजना वास्तव में।

एक सामान्य संरचना में 18,000 वस्तुओं का भंडारण: 8 अलग-अलग तालिकाओं में 90,000 पंक्तियाँ। 1 मिनट के लिए उन्हें हमारे जावा ऑब्जेक्ट मॉडल को पुनः प्राप्त करने और उन्हें मैप करने के लिए ले लिया, यही सब कुछ सही ढंग से अनुक्रमित आदि के साथ है।

एक हल्के पाठ प्रतिनिधित्व का उपयोग करके उन्हें कुंजी / मान जोड़े के रूप में संग्रहीत करना: 1 तालिका, 18,000 पंक्तियों, 3 सेकंड में उन सभी को पुनः प्राप्त करने और जावा ऑब्जेक्ट को फिर से संगठित करने के लिए।

व्यावसायिक शब्दों में: पहला विकल्प संभव नहीं था। दूसरा विकल्प का अर्थ है हमारा ऐप काम करता है।

प्रौद्योगिकी विवरण: SQL और NoSQL दोनों के लिए MySQL पर चल रहा है! डेटा को दूषित न करने, अच्छी तरह से स्केलिंग, फ़ॉकिंग के लिए समर्थन इत्यादि के लिए अच्छे लेनदेन के समर्थन, प्रदर्शन और सिद्ध ट्रैक रिकॉर्ड के लिए MySQL के साथ चिपके रहना।

MySQL में हमारा डेटा मॉडल अब केवल प्रमुख फ़ील्ड्स (पूर्णांक) और बड़ा "मान" फ़ील्ड है: मूल रूप से केवल एक बड़ा टेक्स्ट फ़ील्ड।

हम नए खिलाड़ियों (CouchDB, Cassandra, MongoDB, आदि) में से किसी के साथ नहीं गए थे, क्योंकि वे प्रत्येक अपने आप में महान सुविधाओं / प्रदर्शन की पेशकश करते हैं, हमेशा हमारी परिस्थितियों (जैसे लापता / अपरिपक्व जावा समर्थन) के लिए कमियां थीं।

MySQL का उपयोग करने वाले (एब) का अतिरिक्त लाभ - हमारे मॉडल के बिट्स जो करते हैं काम संबंधित रूप से आसानी से हमारे कुंजी / मान डेटा संग्रहीत करने के लिए जोड़ा जा सकता है।

अपडेट: यहां इस बात का उदाहरण है कि हमने कैसे टेक्स्ट कंटेंट का प्रतिनिधित्व किया, न कि हमारे वास्तविक व्यावसायिक डोमेन (हम "उत्पादों" के साथ काम नहीं करते) के रूप में मेरे बॉस ने मुझे गोली मार दी, लेकिन पुनरावर्ती पहलू (एक इकाई, सहित, इस विचार को व्यक्त करते हैं) एक उत्पाद, "युक्त" अन्य)। उम्मीद है कि यह स्पष्ट है कि कैसे एक सामान्यीकृत संरचना में यह काफी कुछ टेबल हो सकता है, जैसे कि किसी उत्पाद को अपने स्वादों की श्रेणी में शामिल करना, जिसमें अन्य उत्पाद शामिल हैं, आदि।

Name=An Example Product
Type=CategoryAProduct
Colour=Blue
Size=Large
Flavours={nice,lovely,unpleasant,foul}
Contains=[
Name=Product2
Type=CategoryBProduct
Size=medium
Flavours={yuck}
------
Name=Product3
Type=CategoryCProduct
Size=Small
Flavours={sublime}
]

2
प्रश्न में दो डेटाबेस (sql और NoSQL) क्या है?
mavnn

दोनों MySQL थे (मैंने इस जानकारी को प्रदान करने के लिए अपनी प्रतिक्रिया संपादित की है, मैं इसे शुरू में भूल गया था)। समान DB, SQL और NoSQL दृष्टिकोण से बहुत अलग प्रदर्शन परिणाम। MySQL के साथ कुंजी / मूल्य दृष्टिकोण से बहुत खुश हैं।
ब्रायन

5
हाय ब्रायन, क्या यह आपके सामान्यीकृत संरचना के स्कीमा का उदाहरण और मुख्य-मूल्य जोड़े "स्कीमा" का एक उदाहरण प्रदान करना संभव होगा? हम एक सामान्यीकृत संरचना के साथ प्रदर्शन के मुद्दों का भी सामना कर रहे हैं और वर्तमान में दो विकल्पों पर विचार कर रहे हैं: या तो हमारी तालिकाओं को निरूपित कर रहे हैं या NoSQL डेटा स्टोर की ओर बढ़ रहे हैं। लाइसेंसिंग और रखरखाव शुल्क के कारण हम पहले से ही भुगतान कर रहे हैं, हम अपने वर्तमान ओरेकल स्टैक पर लाभ उठाना चाहते हैं और इसलिए, एक असामान्य RDBMS समाधान की ओर झुक रहे हैं। एक उदाहरण दिलचस्प होगा!
14:24

@ ब्रायन: चूंकि जावा में 4 उदाहरण लिखे गए हैं, जिसमें जावा समर्थन सुविधाएँ गायब या अपरिपक्व थीं? मुझे इस क्षेत्र में कोई अनुभव नहीं है, लेकिन यह मुझे थोड़ा आश्चर्यजनक लगता है।
जिमी

tthong - निश्चित रूप से हमारे सामान्यीकृत स्कीमा को शामिल करने का तरीका नहीं है लेकिन मैंने एक उदाहरण जोड़ा है कि हम अपनी सामग्री को एक पाठ क्षेत्र में कैसे संग्रहीत करते हैं। यह थोड़ा विवादित है, मैं एक वास्तविक उदाहरण को शामिल करने में सक्षम नहीं हूं क्योंकि मेरे बॉस बैलिस्टिक जाएंगे इसलिए इस "डेटा मॉडल" के साथ कोई भी "समस्या" उस कारण के लिए सबसे अधिक संभावना है। मैं ओरेकल और कुछ अन्य समाधानों को बेंचमार्किंग करने की सलाह दूंगा, लेकिन अगर आपके संगठन में अच्छी ओरेकल विशेषज्ञता, डीबीए, बैकअप आदि हैं, तो यह विचार करने के लिए एक बहुत अच्छा विकल्प हो सकता है
ब्रायन

22

टॉड हॉफ की highscalability.com में कुछ केस स्टडी सहित NoSQL का बहुत बड़ा कवरेज है।

वाणिज्यिक वर्टिका स्तंभ डीबीएमएस आपके उद्देश्यों के अनुरूप हो सकता है (भले ही यह एसक्यूएल का समर्थन करता है): यह एनालिटिक्स प्रश्नों के लिए पारंपरिक रिलेशनल डीबीएमएस के साथ तुलना में बहुत तेज है। स्टोनब्रेकर, एट अल। हाल ही में सीएसीएम पेपर देखें वर्टिका के नक्शे-कम के विपरीत देखें।

अपडेट: और ट्विटर के चयनित कैसंड्रा को HBase, Voldemort, MongoDB, MemcacheDB, Redis, और HyperTable सहित कई अन्य लोगों के ऊपर ।

अद्यतन 2: रिक कैटेल ने अभी उच्च प्रदर्शन डेटा स्टोर में कई NoSQL सिस्टम की तुलना प्रकाशित की है । और रिक के कागज पर highscalability.com का टेक है



@ar: धन्यवाद, यह एक अच्छी कड़ी है। वर्टिका के लोगों ने उचित मात्रा में विवाद उत्पन्न किया है।
जिम फेरेंस

8

हमने अपने डेटा का हिस्सा mysql से mongodb में ले लिया, स्केलेबिलिटी के लिए इतना नहीं बल्कि और अधिक क्योंकि यह फ़ाइलों और गैर-सारणीबद्ध डेटा के लिए बेहतर फिट है।

उत्पादन में वर्तमान में हम स्टोर करते हैं:

  • 25 हजार फाइलें (60GB)
  • 130 मिलियन अन्य "दस्तावेज" (350GB)

लगभग 10GB के दैनिक कारोबार के साथ।

डेटाबेस को दो नोड्स (6x450GB sas raid10) पर एक "युग्मित" कॉन्फ़िगरेशन में एपोड / wsgi / python क्लाइंट के साथ mongodb python एपीआई (pymongo) का उपयोग करके तैनात किया गया है। डिस्क सेटअप शायद ओवरकिल है, लेकिन जो हम mysql के लिए उपयोग करते हैं।

पाइमोन्गो थ्रेडपूल और मोंगोडब सर्वर की अवरुद्ध प्रकृति के साथ कुछ मुद्दों के अलावा यह एक अच्छा अनुभव रहा है।


क्या आप कृपया नाम वाले मुद्दों पर थोड़ा विस्तार कर सकते हैं?
felixfbecker

5

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

काउचबडी: ए केस स्टडी

अनिवार्य रूप से, textme एप्लिकेशन ने अपनी विस्फोट डेटा समस्या से निपटने के लिए CouchDB का उपयोग किया। उन्होंने पाया कि बड़ी मात्रा में अभिलेखीय डेटा से निपटने के लिए SQL बहुत धीमा था, और इसे CouchDB पर स्थानांतरित कर दिया। यह एक उत्कृष्ट रीड है, और वह यह पता लगाने की पूरी प्रक्रिया पर चर्चा करते हैं कि काउचडीबी क्या समस्याएं हल कर सकता है और उन्हें कैसे हल कर सकता है।


5

हमने अपने कुछ डेटा को स्थानांतरित कर दिया है जिसे हम Postgresql और Memcached में Redis में स्टोर करते थे । प्रमुख मूल्य भंडार श्रेणीबद्ध वस्तु डेटा को संग्रहीत करने के लिए बहुत बेहतर हैं। आप ब्लॉब डेटा को बहुत तेज़ी से और बहुत कम विकास के समय और प्रयास के साथ ओआरएम का उपयोग करके अपने ब्लॉब को आरडीबीएमएस में मैप कर सकते हैं।

मेरे पास एक ओपन सोर्स c # redis क्लाइंट है जो आपको 1 लाइन के साथ किसी भी POCO ऑब्जेक्ट को स्टोर और पुनः प्राप्त करने देता है:

var customers = redis.Lists["customers"]; //Implements IList<Customer>
customers.Add(new Customer { Name = "Mr Customer" });

कुंजी मूल्य स्टोर भी 'स्केल-आउट' के लिए बहुत आसान हैं क्योंकि आप एक नया सर्वर जोड़ सकते हैं और फिर नए सर्वर को शामिल करने के लिए अपने लोड को समान रूप से विभाजित कर सकते हैं। महत्वपूर्ण रूप से, कोई केंद्रीय सर्वर नहीं है जो आपकी मापनीयता को सीमित करेगा। (हालांकि आपको अपने अनुरोधों को वितरित करने के लिए लगातार हैशिंग के लिए रणनीति की आवश्यकता होगी)।

मैं रेडिस को कई ग्राहकों के लिए तेजी से, समवर्ती और परमाणु पहुंच प्रदान करने वाले स्टेरॉयड पर एक 'प्रबंधित पाठ फ़ाइल' मानता हूं, इसलिए मैं अब रेडिस का उपयोग करने के लिए एक टेक्स्ट फ़ाइल या एम्बेडेड डेटाबेस का उपयोग करता था। उदाहरण के लिए, हमारी सभी सेवाओं के लिए एक वास्तविक समय संयुक्त रोलिंग त्रुटि लॉग प्राप्त करने के लिए (जो हमारे लिए एक कठिन कार्य है), अब केवल एक जोड़ी लाइनों के साथ एक रेडिस सर्वर साइड सूची में त्रुटि पूर्व-लंबित द्वारा पूरा किया जाता है और फिर सूची को ट्रिमिंग करते हुए केवल अंतिम 1000 को रखा जाता है, जैसे:

var errors = redis.List["combined:errors"];
errors.Insert(0, new Error { Name = ex.GetType().Name, Message = ex.Message, StackTrace = ex.StackTrace});
redis.TrimList(errors, 1000);

4

मेरे पास पहले हाथ के अनुभव नहीं हैं। लेकिन मुझे यह ब्लॉग प्रविष्टि काफी रोचक लगी।


3

मैं दो-आयामी संबंधपरक डेटाबेस (पंक्तियों और स्तंभों) को सहेजने / अद्यतन करने और फिर कई तालिकाओं के साथ एक डोमेन ऑब्जेक्ट उदाहरण को फिर से शुरू करने के लिए बहुत सारे कोड लेता है। । उन सभी जॉइन होने के प्रदर्शन हिट का उल्लेख नहीं करने के लिए, उन सभी डिस्क को पढ़ता है ... एक डोमेन ऑब्जेक्ट जैसे कि बिक्री आदेश या ग्राहक रिकॉर्ड को देखने / हेरफेर करने के लिए।

हमने ऑब्जेक्ट डेटाबेस मैनेजमेंट सिस्टम्स (ODBMS) पर स्विच कर दिया है। वे सूचीबद्ध noSQL सिस्टम की क्षमताओं से परे हैं। जेमस्टोन / एस (स्मॉलटाक के लिए) एक ऐसा उदाहरण है। अन्य ओडीबीएमएस समाधान हैं जिनमें कई भाषाओं के ड्राइवर हैं। एक प्रमुख डेवलपर लाभ, आपकी कक्षा पदानुक्रम स्वचालित रूप से आपके डेटाबेस स्कीमा, उपवर्ग और सभी है। डेटाबेस के लिए वस्तुओं को स्थायी बनाने के लिए बस अपनी ऑब्जेक्ट ओरिएंटेड भाषा का उपयोग करें। ODBMS सिस्टम एक ACID स्तर की लेनदेन अखंडता प्रदान करता है, इसलिए यह वित्तीय प्रणालियों में भी काम करेगा।


3

मैंने एक M2M सिस्टम के लिए MySQL (InnoDB) से कैसेंड्रा में स्विच किया, जो मूल रूप से प्रत्येक डिवाइस के लिए सेंसर की समय-श्रृंखला संग्रहीत करता है। प्रत्येक डेटा (device_id, date) और (device_id, type_of_sensor, date) द्वारा अनुक्रमित किया जाता है। MySQL संस्करण में 20 लाख पंक्तियाँ थीं।

माई एसक्यूएल:

  • मास्टर-मास्टर सिंक्रनाइज़ेशन में सेटअप। सिंक्रनाइज़ेशन के नुकसान के आसपास कुछ समस्या दिखाई दी । यह तनावपूर्ण था और खासकर शुरुआत में इसे ठीक करने में घंटों लग सकते थे।
  • सम्मिलन समय एक समस्या नहीं थी, लेकिन अधिक से अधिक मेमोरी की आवश्यकता होती है डेटा बढ़ने पर । समस्या यह है कि अनुक्रमित को संपूर्ण माना जाता है। मेरे मामले में, मैं केवल अनुक्रमणिका के बहुत पतले हिस्सों का उपयोग कर रहा था जो कि मेमोरी में लोड करने के लिए आवश्यक थे (केवल कुछ प्रतिशत उपकरणों की अक्सर निगरानी की जाती थी और यह सबसे हालिया डेटा पर था)।
  • बैकअप लेना कठिन था । Rsync बड़ी InnoDB टेबल फ़ाइलों पर तेजी से बैकअप करने में सक्षम नहीं है।
  • यह जल्दी से स्पष्ट हो गया कि हेवी टेबल स्कीमा को अपडेट करना संभव नहीं था , क्योंकि इसमें बहुत अधिक समय (घंटे) लगता था।
  • डेटा आयात करने में घंटों लग गए (तब भी जब इंडेक्सिंग अंत में की गई थी)। सबसे अच्छा बचाव योजना हमेशा डेटाबेस (डेटा फ़ाइल + लॉग) की कुछ प्रतियां रखना था।
  • आगे बढ़ते एक होस्टिंग कंपनी से एक दूसरे के लिए वास्तव में एक बड़ी बात थी । प्रतिकृति को बहुत सावधानी से संभाला जाना था।

कैसेंड्रा:

  • MySQL की तुलना में इंस्टॉल करना और भी आसान है।
  • बहुत सारे RAM की आवश्यकता होती है। एक 2GB इंस्टेंस इसे पहले संस्करणों में नहीं चला सकता था, अब यह 1GB इंस्टेंस पर काम कर सकता है लेकिन यह विचार नहीं है (वैसे बहुत सारे डेटा फ्लश)। यह 8GB देना हमारे मामले में पर्याप्त था।
  • एक बार जब आप समझ जाते हैं कि आप अपने डेटा को कैसे व्यवस्थित करते हैं, तो भंडारण करना आसान है। अनुरोध करना थोड़ा अधिक जटिल है। लेकिन एक बार जब आप इसके चारों ओर हो जाते हैं, तो यह वास्तव में तेज़ होता है (आप वास्तव में गलती नहीं कर सकते जब तक कि आप वास्तव में नहीं चाहते)।
  • यदि पिछला चरण सही किया गया था, तो यह सुपर फास्ट है।
  • यह लगभग ऐसा लगता है कि डेटा बैकअप के लिए व्यवस्थित है। हर नए डेटा को नई फाइलों के रूप में जोड़ा जाता है। मैं व्यक्तिगत रूप से, लेकिन यह एक अच्छी बात नहीं है, हर रात और हर शटडाउन से पहले (आमतौर पर अपग्रेड के लिए) डेटा फ्लश करता है ताकि रिस्टोर करने में कम समय लगे, क्योंकि हमारे पास पढ़ने के लिए कम लॉग हैं। यह बहुत सारी फाइलें नहीं बनाता है कि वे संकुचित हैं।
  • डेटा आयात करना नरक के रूप में तेज़ है। और अधिक मेजबान आपके पास तेज है। डेटा के गीगाबाइट्स का निर्यात और आयात करना अब कोई समस्या नहीं है।
  • स्कीमा का न होना एक बहुत ही दिलचस्प बात है क्योंकि आप अपनी आवश्यकताओं का पालन करने के लिए डेटा का विकास कर सकते हैं। जिसका अर्थ हो सकता है कि एक ही कॉलम परिवार में एक ही समय में आपके डेटा के विभिन्न संस्करण हों।
  • होस्ट जोड़ना आसान था (हालांकि तेज़ नहीं) लेकिन मैंने इसे मल्टी-डेटासेंटर सेटअप पर नहीं किया है।

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


2

मैं नही। मैं एक सरल और मुफ्त की-वैल्यू स्टोर का उपयोग करना चाहूंगा जिसे मैं प्रक्रिया में कह सकता हूं, लेकिन विंडोज प्लेटफॉर्म पर ऐसी कोई चीज मौजूद नहीं है। अब मैं Sqlite का उपयोग करता हूं, लेकिन मैं टोक्यो कैबिनेट की तरह कुछ का उपयोग करना चाहूंगा। बर्कलेबीडी के पास लाइसेंस "मुद्दे" हैं।

हालाँकि यदि आप Windows OS का उपयोग करना चाहते हैं तो NoSQL डेटाबेस की आपकी पसंद सीमित है। और वहाँ हमेशा एक सी # प्रदाता नहीं है

मैंने MongoDB की कोशिश की और यह Sqlite से 40 गुना तेज था, इसलिए शायद मुझे इसका उपयोग करना चाहिए। लेकिन मैं अभी भी प्रक्रिया समाधान में एक सरल की उम्मीद करता हूं।


3
एसी # प्रदाता ज्यादातर अप्रासंगिक है, क्योंकि इन प्रणालियों में एक इंटरफ़ेस नहीं है जो पारंपरिक डेटाबेस की तरह कुछ भी दिखता है (इसलिए "NoSQL") इसलिए ADO.NET इंटरफ़ेस एक वर्ग छेद में एक गोल खूंटी होगा।
मार्क

2
वास्तव में आपको ADO.NET इंटरफ़ेस को लागू करने वाले प्रदाता की आवश्यकता नहीं है, लेकिन आपको अभी भी db और .NET के बीच कुछ प्रकार के ड्राइवर / प्रदाता की आवश्यकता है। MongoDB के लिए एक है, लेकिन यह अभी तक सही नहीं है। उदाहरण के लिए अपवाद हैंडलिंग में सुधार की आवश्यकता है।
थियो

मेरे पास redis @ code.google.com/p/servicestack/wiki/ServiceStackRedis के लिए एक खुला स्रोत c # क्लाइंट है जो आपको पाठ टाइप के रूप में 'टाइप किए गए POCO' को संग्रहीत करने की अनुमति देता है और IList <T> और ICollection <T> redis सर्वर के लिए इंटरफेस प्रदान करता है। सूची और सेट, आदि
मिथक

2

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


2

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


1

मैंने अतीत में काउचबेस का उपयोग किया है और हमने समस्याओं और अन्य मुद्दों के मेजबान के असंतुलन का सामना किया। वर्तमान में मैं कई उत्पादन परियोजनाओं में रेडिस का उपयोग कर रहा हूं। मैं redislabs.com का उपयोग कर रहा हूं, जो रेडिस के लिए एक प्रबंधित सेवा है जो आपके रेडिस क्लस्टर्स को स्केल करने का ध्यान रखती है। मैंने http://thomasjaeger.wordpress.com पर अपने ब्लॉग पर ऑब्जेक्ट ज़िद पर एक वीडियो प्रकाशित किया है, जिसमें दिखाया गया है कि एक प्रदाता मॉडल में Redis का उपयोग कैसे करें और Redis में अपने C # ऑब्जेक्ट को कैसे स्टोर करें। जरा देखो तो।


मुझे पता है कि यह अब लंबा शॉट है, लेकिन विशेष रूप से आपके द्वारा किए गए असंतुलन में क्या मुद्दे हैं?
सीयर

1

मैं किसी को भी इसे पढ़ने के लिए प्रोत्साहित करता हूं कि काउचबेस को एक बार फिर से आजमाने के लिए 3.0 दरवाजा बाहर है। शुरुआत के लिए 200 से अधिक नई सुविधाएँ हैं। Couchbase Server का प्रदर्शन, उपलब्धता, मापनीयता और आसान प्रबंधन सुविधाएँ एक अत्यंत लचीले, अत्यधिक उपलब्ध डेटाबेस के लिए बनाता है। यूआई प्रबंधन अंतर्निहित है और एपीआई स्वचालित रूप से क्लस्टर नोड्स की खोज करते हैं ताकि डीबी के लिए आवेदन से लोड बैलेंसर की कोई आवश्यकता न हो। जबकि हमारे पास इस समय एक प्रबंधित सेवा नहीं है, तो आप AWS, RedHat Gears, Cloudera, Rackspace, Docker कंटेनरों जैसे CloudSoft जैसी चीज़ों पर couchbase चला सकते हैं, और भी बहुत कुछ। रीबैलेंसिंग के बारे में यह इस बात पर निर्भर करता है कि आप किस चीज का विशेष रूप से जिक्र कर रहे हैं लेकिन काउचबेस नोड फेल होने के बाद ऑटोमैटिकली रीबैलेंस नहीं करता है, जैसा कि आसानी से किया गया है, लेकिन एक प्रशासक पहले नोड विफलता के लिए ऑटो फ़ेलओवर को सेटअप कर सकता है और हमारे एपीआई का उपयोग करके आप उन्हें सक्रिय करने से पहले पढ़ने के लिए प्रतिकृति vbuckets तक पहुंच प्राप्त कर सकते हैं या रेस्टापी का उपयोग करके आप एक निगरानी उपकरण द्वारा एक विफलता को लागू कर सकते हैं। यह एक विशेष मामला है लेकिन किया जाना संभव है।

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

  1. काउचबेस सर्वर 3.0
  2. प्रशासन गाइड
  3. बाकी एपीआई
  4. डेवलपर मार्गदर्शिकाएँ

अंत में, मैं आपको वितरित क्वेरी के लिए N1QL की जांच करने के लिए भी प्रोत्साहित करूंगा:

  1. N1QL ट्यूटोरियल
  2. N1QL गाइड

पढ़ने के लिए धन्यवाद और मुझे या दूसरों को पता है कि क्या आपको अधिक मदद चाहिए!

ऑस्टिन


0

मैंने अतीत में वर्टिका का उपयोग किया है। यह स्तंभ संपीड़न और शीघ्रता डिस्क डिस्क पर निर्भर करता है और आपके हार्डवेयर का अधिकतम भंडारण करने की आवश्यकता को कम करता है। तेज़ डेटा लोड और उच्च संगामना आपको कम विलंबता वाले अधिक उपयोगकर्ताओं के लिए एनालिटिक्स डेटा की सेवा देता है।

इससे पहले, हम Oracle डेटाबेस को अरबों के रिकॉर्ड से जोड़ रहे थे और प्रदर्शन बहुत उप-इष्टतम था। SSD के साथ अनुकूलन करने पर भी प्रश्नों को चलाने में 8 से 12 सेकंड लगते हैं। इसलिए, हमने एक तेज़ रीड ऑप्टिमाइज़्ड, एनालिटिक्स ओरिएंटेड डेटाबेस का उपयोग करने की आवश्यकता महसूस की। दुबली सेवा परत के पीछे वर्टिका क्लस्टर्स के साथ, हम उप-दूसरे प्रदर्शन के साथ एपीआई चला सकते हैं।

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

  1. भंडारण स्थान को कम करने के लिए डेटा को संपीड़ित और एनकोड करें।
  2. डेटाबेस क्लस्टर में वितरण को सरल बनाएं।
  3. उच्च उपलब्धता और पुनर्प्राप्ति प्रदान करें।

वर्टिका सेग्मेंटेशन का उपयोग करके क्लस्टर भर में डेटा वितरित करके डेटाबेस का अनुकूलन करता है।

  1. सेगमेंटेशन डेटा के एक हिस्से को नोड पर रखता है।
  2. यह समान रूप से सभी नोड्स पर डेटा वितरित करता है। इस प्रकार, प्रत्येक नोड क्वेरी प्रक्रिया का एक टुकड़ा करता है।
  3. क्वेरी क्लस्टर पर चलती है और प्रत्येक नोड क्वेरी प्लान प्राप्त करता है।
  4. प्रश्नों के परिणामों को एकत्र किया जाता है और आउटपुट बनाने के लिए उपयोग किया जाता है।

अधिक जानकारी के लिए, कृपया वर्टिका प्रलेखन @ https://www.vertica.com/knowledgebase/ देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.