कौन सा तेज है: बड़े JSON डेटासेट पर PostgreSQL बनाम MongoDB?


10

मेरे पास ~ 300 बाइट्स में 9m JSON ऑब्जेक्ट्स के साथ एक बड़ा डेटासेट है। वे एक लिंक एग्रीगेटर से पोस्ट हैं: मूल रूप से लिंक (एक URL, शीर्षक और लेखक आईडी) और टिप्पणियां (पाठ और लेखक आईडी) + मेटाडेटा।

वे एक तालिका में बहुत अच्छी तरह से संबंधपरक रिकॉर्ड हो सकते हैं, इस तथ्य को छोड़कर कि उनके पास बाल अभिलेखों की ओर इशारा करने वाले आईडी के साथ एक सरणी फ़ील्ड है।

क्या कार्यान्वयन अधिक ठोस दिखता है?

  1. JSON एक PostgreSQL डेटाबेस पर ऑब्जेक्ट्स (सिर्फ एक कॉलम के साथ एक बड़ी तालिका, अर्थात् JSON ऑब्जेक्ट)
  2. JSON एक MongoDB पर ऑब्जेक्ट्स
  3. JSON ऑब्जेक्ट्स को कॉलम में विस्फोट करें और PostgreSQL पर सरणियों का उपयोग करें

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


स्नोफ्लेक चेकआउट करना चाह सकते हैं। यह संरचित और अर्ध-संरचित डेटा दोनों को एक साथ संभाल सकता है। www.snowflake.net

मुझे लगता है कि आपको "जॉइन में अधिकतम प्रदर्शन" का विस्तार करने की आवश्यकता है। क्या शामिल हो रहा है?
स्पेसमैन

जवाबों:


10

डेटा लोड के लिए, पोस्टग्रे आउटपरफॉर्म MongoDB। क्वेरी काउंट वापस करते समय MongoDB लगभग हमेशा तेज होता है। PostgreSQL इंडेक्स का उपयोग करके प्रश्नों के लिए लगभग हमेशा तेज होता है।

इस वेबसाइट को देखें और यह भी अधिक जानकारी के लिए। उनकी बहुत विस्तृत व्याख्या है।


बहुत अच्छे लिंक, विशेष रूप से पहले वाले जो अधिक विस्तृत और संपूर्ण दिखते हैं। जब वर्ष (एक स्ट्रिंग) की खोज और रिकॉर्ड आईडी (एक इंट) लौटाते हैं, तो potgresql लगभग 4x तेज होता है, लेकिन जब लेखक लौटते हैं, तो परिमाण का क्रम समान होता है। लेखक लौटते समय MongoDB केवल 20% धीमा है। क्या कोई इंट में लौटने और एक स्ट्रिंग को वापस करने के बीच एक मूलभूत अंतर है जो इसे समझा सकता है? यही है, अगर रिकिड एक स्ट्रिंग था, तो क्या पोस्टग्रैस्कल का लाभ गायब हो जाएगा और दोनों लेखक के मामले में समान होंगे?
एमएएसएल

1

आपको मोंगोदब की योजनाबद्ध डिजाइन से अधिक लाभ हो सकता है। इसका मतलब है कि मक्खी पर डेटा संरचनाओं को संशोधित करना बहुत आसान है।

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

शायद गति कम महत्वपूर्ण हो जाती है क्योंकि परिप्रेक्ष्य और प्राथमिकताएं बदल जाती हैं।

मुझे आशा है कि वह मदद करेंगे।

-Todd


सबसे हाल के बेंचमार्क में, PostgreSQL पूरी तरह से MongoDB के स्वामित्व में है ...
QUIT - Anony-Mousse

@ Anony-Mousse: दिलचस्प है। क्या आप कोई स्रोत जानते हैं?
इसहाक

उदा। tiborsimko.org/postgresql-mongodb-json-select-speed.html और enterprisedb.com/postgres-plus-edb-blog/marc-linster/… अन्य उत्तर से। एक प्रमुख कारण है: पोस्टग्रेज में अच्छे इंडेक्स होते हैं, जबकि MongoDB में इंडेक्स इसके लायक नहीं होते हैं। इसके अलावा, Postgres को JSON से निपटने के लिए BSON का समर्थन और अन्य अतिरिक्त मिला, जिससे प्रदर्शन में काफी सुधार हुआ। यही कारण है कि यह पहले संस्करणों की तुलना में बहुत तेज हो गया।
क्विट है - Anony-Mousse

0

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

जैसा कि पहले उत्तर दिया गया था, सामान्य तौर पर पोस्टग्रैक्स्ल मेंगो से तेज होता है, कुछ समय से 4 गुना अधिक तेजी से। उदाहरण के लिए देखें: http://www.enterprisedb.com/postgres-plus-edb-blog/marc-linster/postgres-outperforms-mongodb-and-ushers-new-developer-reality

आपने कहा कि आप जॉइन में प्रदर्शन को बेहतर बनाने में रुचि रखते हैं। मुझे लगता है कि आप संस्थाओं (जैसे, पोस्ट, लेखक) के बीच समानता की गणना करने में रुचि रखते हैं, इसलिए आप मुख्य रूप से इसके साथ तालिका में शामिल हो जाएंगे (जैसे, पोस्ट या लेखक द्वारा) और कुल।

इस तथ्य को जोड़ें कि प्रारंभिक लोडिंग के बाद आपके डेटाबेस को केवल पढ़ा जाएगा, जो समस्या को अनुक्रमण के उपयोग के लिए बहुत उपयुक्त बनाता है। आप इंडेक्स अपडेट के लिए भुगतान नहीं करेंगे क्योंकि आपके पास कोई भी नहीं होगा और मुझे लगता है कि आपके पास इंडेक्स के लिए अतिरिक्त स्टोरेज है।

मैंने पोस्टग्रेज का उपयोग किया और डेटा को दो तालिकाओं में संग्रहीत किया:

तालिका पोस्ट (पूर्णांक पूर्णांक, url varchar (255), author_id पूर्णांक) बनाएं;

- डेटा लोड करें और फिर इंडेक्स बनाएं। - इससे तेज लोड होगा और बेहतर सूचकांकों में परिवर्तन होगा, टेबल पोस्ट्स में बाधाएं पोस्ट_पैक प्राथमिक कुंजी (पोस्ट_ड) जोड़ें; सूचकांक post_author को पदों पर बनाएं (Author_id);

तालिका टिप्पणियाँ (टिप्पणी_id पूर्णांक, पोस्ट_आईडी पूर्णांक, लेखक_आईडी पूर्णांक, टिप्पणी varchar (255)) बनाएं; परिवर्तन तालिका टिप्पणियाँ बाधा टिप्पणियाँ जोड़ें_ प्राथमिक प्राथमिक कुंजी (टिप्पणी_ड); टिप्पणी पर अनुक्रमणिका comment_author बनाएं (Author_id); टिप्पणी पर इंडेक्स टिप्पणी_ पोस्ट बनाएं (पोस्ट_िड);

फिर आप चुनिंदा मी जैसे प्रश्नों में टिप्पणियों के आधार पर लेखक की समानता की गणना कर सकते हैं। Author_id as m_author_id, a। Author_id a_author_id के रूप में, काउंट (अलग m.post_id) टिप्पणियों के रूप में पोस्ट के रूप में m, m.author_id द्वारा a (post_id) समूह के रूप में टिप्पणियों में शामिल होते हैं, a। author_id

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

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