8

में "सोशल-फीड" डिज़ाइन करना यह प्रश्न किसी भी दस्तावेज़ आधारित NoSQL डेटाबेस के लिए प्रासंगिक हो सकता है।डायनेमोडीबी

मैं कुछ रुचि विशिष्ट सोशल नेटवर्क बना रहा हूं और स्केलेबिलिटी और नो-दर्द-प्रशासन कारकों के कारण डायनेमो डीबी के साथ जाने का फैसला किया है। डेटाबेस में केवल दो मुख्य इकाइयां हैं: उपयोगकर्ता और पोस्ट। आम के लिए

आवश्यकता प्रश्नों बहुत सरल कर रहे हैं:

  • होम फ़ीड (लोगों की फ़ीड मेरा अनुसरण कर)
  • मेरे/उपयोगकर्ता फ़ीड (मेरा फ़ीड, या विशिष्ट उपयोगकर्ता फ़ीड)
  • उपयोगकर्ता की सूची मैं/उपयोगकर्ता पीछा
  • अनुसरणकर्ताओं की सूची

यहाँ एक डेटाबेस है योजना मैं अब तक के साथ आते हैं (कथा: __thisIsHashKey और _thisIsRangeKey):

timeline = { // post 
    __usarname:"totocaster", 
    _date:"1245678901345", 
    record_type:"collection", 
    items: ["2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594","2d931510-d99f-494a-8c67-87feb05e1594"], 
    number_of_likes:123, 
    description:"Hello, this is cool" 
} 

timeline = { // new follower 
    __usarname:"totocaster", 
    _date:"1245678901345", 
    type:"follow", 
    follower:"tamuna123" 
} 

timeline = { // new like 
    __usarname:"totocaster", 
    _date:"1245678901345", 
    record_type:"like", 
    liker:"tamuna123", 
    like_date:"123255634567456" 
} 

users = { 
    __username:"totocaster", 
    avatar_url:"2d931510-d99f-494a-8c67-87feb05e1594", 
    followers:["don_gio","tamuna123","barbie","mikecsharp","bassman"], 
    following:["tamuna123","barbie","mikecsharp"], 
    likes:[ 
    { 
     username:'barbie', 
     date:"123255634567456" 
    }, 
    { 
     username:"mikecsharp", 
     date:"123255634567456" 
    }], 
    full_name:"Toto Tvalavadze", 
    password:"Hashed Key", 
    email:"[email protected]" 
} 

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

मैं एक बार में उपयोगकर्ता-टाइमलाइन के लिए क्वेरी नहीं कर सकता। यह सिस्टम द्वारा सबसे अधिक मांग किए गए प्रश्नों में से एक होगा और मैं ऐसा करने के लिए प्रभावी तरीका प्रदान नहीं कर सकता। कृपया मदद करे। धन्यवाद।

+0

यह मेरे लिए एक सतत सवाल है, जबकि मैं अपने सोशल नेटवर्क की योजना बना रहा हूं – MCKapur

+0

तो क्या आप टाइमलाइन टेबल से सभी उपयोगकर्ता डेटा प्राप्त करने में सक्षम होना चाहते हैं? आप केवल उस उपयोगकर्ता नाम के लिए हैशकी पर पूछ सकते हैं? यदि ऐसा नहीं है तो मुझे थोड़ा और विस्तृत क्वेरी उदाहरण दें, शायद एक साधारण एसक्यूएल-जैसे सिंटैक्स में। यानी 'सभी समयरेखा से चुनें जहां USERNAME = totacaster' – greg

उत्तर

1

मैं टाइटन ग्राफ डेटाबेस (http://thinkaurelius.github.com/titan/) और नियो 4j (http://www.neo4j.org/) देखेंगे।

मुझे पता है कि टाइटन बड़े डेटा सेट के साथ बहुत अच्छी तरह से स्केल करने का दावा करता है।

अंततः मुझे लगता है कि आपका मॉडल एक ग्राफ के लिए अच्छी तरह से नक्शा बनाता है। उपयोगकर्ता और पोस्ट नोड्स होंगे, और फिर आप उन्हें किनारों के माध्यम से मनमाने ढंग से कनेक्ट कर सकते हैं। एक उपयोगकर्ता (नोड) किसी अन्य उपयोगकर्ता (नोड) का मित्र (किनारा) है।

उपयोगकर्ता (नोड) में उनकी समयरेखा में कई पोस्ट (नोड्स) हैं। फिर आप ग्राफ के माध्यम से दिलचस्प ट्रैवर्सल चला सकते हैं।

+0

ओपी डायनेमो डीबी के बारे में है, क्या आप कह रहे हैं कि यह वास्तव में एसएन के लिए एक अच्छा विकल्प नहीं है? – SuperUberDuper

0

मुझे दैनिक समाचार फ़ीड के साथ काम करना होता है। (धारा-फ्रेमवर्क के लेखक और स्थापित getstream.io)

सबसे आम समाधान मैं देख रहा हूँ कर रहे हैं:

  • कैसेंड्रा (Instagram)
  • Redis (महंगा है, लेकिन आसान)
  • MongoDB
  • DynamoDB
  • RocksDB (Linkedin)

अधिकांश लोग पढ़ने पर या प्रशंसा पर fanout या तो fanout का उपयोग करें। इससे एक कामकाजी समाधान बनाना आसान हो जाता है, लेकिन यह महंगा हो सकता है। आपकी सबसे अच्छी शर्त उन 2 दृष्टिकोणों के संयोजन का उपयोग करना है। तो ज्यादातर मामलों में लिखने पर एक प्रशंसा करें, लेकिन बहुत लोकप्रिय फीड के लिए उन्हें स्मृति में रखें।

Stream-Framework खुला स्रोत है और कैसेंड्रा का समर्थन करता है/Redis & अजगर

getstream.io एक होस्ट किए गए समाधान जाओ & Rocksdb के शीर्ष पर निर्माण है।

आप DynamoDB सेटअप करने के लिए सुनिश्चित हो सही विभाजन कुंजी का उपयोग कर खत्म करते हैं: https://shinesolutions.com/2016/06/27/a-deep-dive-into-dynamodb-partitions/

भी ध्यान रखें कि एक Redis या DynamoDB आधारित समाधान को बहुत शीघ्र महंगा हो जाएगा। आपको कैसंड्रा या रॉक्स डीबी का लाभ उठाकर प्रति उपयोगकर्ता सबसे कम लागत मिल जाएगी।

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