2012-04-30 26 views
9

रेडडिट वर्तमान में अपने डेटाबेस को PosgreSQL से अपाचे कैसंद्रा में माइग्रेट कर रहा है। क्या किसी को पता है कि कैसंड्रा में रेडडिट का उपयोग किस डेटाबेस स्कीमा करता है?Reddit में उपयोग किए जाने वाले कैसंड्रा डेटाबेस स्कीमा क्या है?

+0

मैं नहीं करता, और मुझे यकीन नहीं है कि रेडडिट के बाहर कोई भी व्यक्ति करता है, लेकिन क्या यह वास्तव में मायने रखता है? मुझे उम्मीद है कि एसओ पर यहां कुछ लोग स्कीमा निर्धारित करने में मदद कर सकते हैं जो * आपके * एप्लिकेशन के लिए सही है। –

+2

रेडडिट ने कोड प्रकाशित किया जो साइट को गिटहब पर पावर करता है: https://github.com/reddit/reddit। मैं कोड में खोज सकता हूं और वहां से स्कीमा निर्धारित कर सकता हूं। लेकिन मैंने सोचा कि यहां पूछना आसान है। –

+1

मैंने कोड के माध्यम से देखा, और मुझे दो दर्जन अलग कॉलमफमिलियों की तरह कुछ दिखाई देता है जो विभिन्न तरीकों से बनाए और उपयोग किए जाते हैं। क्या कोई क्षेत्र विशेष रूप से आप सोच रहे हैं, या आप कैसंड्रा-क्ली से 'शो स्कीमा' आउटपुट जैसे कुछ के लिए अधिक देख रहे हैं? –

उत्तर

-1

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

कॉच डीबी और मोंगोडीबी में आप जेएसओएन दस्तावेजों को सीधे स्टोर कर सकते हैं। कैसंद्रा में मैं JSON को स्ट्रिंग के रूप में सहेज दूंगा। तो डेटा संरचना केवल

root-comments 
{ 
    root-comment-id 
    root-comment-json-string 
} 

और प्रत्येक रूट टिप्पणी-json स्ट्रिंग इस प्रकार दिखाई देगा होगा:

{ 
comment : "hello world" 
answers : 
[ 
    { 
    comment : "reply to hello world" 
    answers : 
    [ 
     { 
     comment : "thanks for the good reply" 
     answers : [] 
     }, 
     { 
     comment : "yes that reply was indeed awesome" 
     answers : [] 
     } 

    ] 
    } 

] 
} 

अतिरिक्त आप एक उपयोगकर्ता नाम, UserID, समय-चिह्न जोड़ने के लिए चाहते हो सकता है, .. .. आदि प्रत्येक टिप्पणी की संरचना के लिए।

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

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

यदि आप "कैसंड्रा पदानुक्रमित डेटा" के लिए इंटरनेट खोजते हैं तो आपको कुछ अन्य दृष्टिकोण मिलते हैं, लेकिन वे सभी सामान्यीकरण पर वापस जाते हैं या वे 'अनंत' पदानुक्रम के लिए पूर्ण नहीं होते हैं।

+1

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

+1

@ कैलिन-आंद्रेईबुर्लोई हां सच है। यह मेरी समझ है कि इस तरह की एक टिप्पणी प्रणाली (जैसे reddit) अद्यतनों की तुलना में कहीं अधिक पढ़ी है। तो मेरा जवाब बिल्कुल सही समाधान है। –

+0

और क्लाइंट पर जावास्क्रिप्ट में परिणाम का पार्सिन आसानी से किया जा सकता है, क्योंकि यह JSON है। –