MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB स्कीमा डिज़ाइन - रीयल-टाइम चैट

मैंने Redis का इस्तेमाल किया , मेरे चैट प्रोजेक्ट के लिए NGINX और PHP-FPM। सुपर सुरुचिपूर्ण नहीं है, लेकिन यह चाल है। पहेली के कुछ अंश हैं।

  1. एक बहुत ही सरल PHP स्क्रिप्ट है जो क्लाइंट कमांड प्राप्त करती है और उन्हें एक विशाल सूची में रखती है। यह देखने के लिए सभी कमरों की सूची और उपयोगकर्ताओं की निजी सूची की भी जांच करता है कि क्या ऐसे संदेश हैं जिन्हें इसे वितरित करना होगा। यह jQuery में लिखे गए क्लाइंट द्वारा मतदान किया जाता है और यह हर कुछ सेकंड में किया जाता है।

  2. एक कमांड लाइन PHP स्क्रिप्ट है जो सर्वर साइड को एक अनंत लूप में 20 बार प्रति सेकंड संचालित करती है, जो इस सूची की जांच करती है और फिर इन कमांड को प्रोसेस करती है। स्क्रिप्ट संभालती है कि कौन किस कमरे में है और स्क्रिप्ट मेमोरी में अनुमतियां, यह जानकारी रेडिस में संग्रहीत नहीं है।

  3. रेडिस में प्रत्येक कमरे के लिए एक सूची और प्रत्येक उपयोगकर्ता के लिए एक सूची है जो एक निजी कतार के रूप में संचालित होती है। इसमें उपयोगकर्ता के प्रत्येक कमरे के लिए कई काउंटर भी हैं। यदि उपयोगकर्ता काउंटर कमरे में कुल संदेशों से कम है, तो यह अंतर प्राप्त करता है और इसे उपयोगकर्ता को भेजता है।

मैं इस समाधान का परीक्षण करने में सक्षम नहीं हूं, लेकिन कम से कम मेरे मूल बेंचमार्किंग से यह शायद प्रति सेकंड कई हजारों संदेशों को संभाल सकता है। प्रदर्शन बढ़ाने के लिए इसे Node.js जैसी किसी चीज़ पर पोर्ट करने का अवसर भी है। रेडिस भी परिपक्व हो रहा है और इसमें कुछ दिलचस्प विशेषताएं हैं जैसे पब/सब्सक्राइब कमांड, जो रुचि के हो सकते हैं, जो संभवत:सर्वर साइड पर पोलिंग को हटा देंगे।

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

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या मोंगोडीबी मूल बहुभाषी विमान के बाहर कोड बिंदुओं के साथ यूटीएफ -8 के तारों को स्टोर और हेरफेर कर सकता है?

  2. MongoDB लुकअप जब विदेशी क्षेत्र एक सरणी है

  3. संग्रह से चयनित फ़ील्ड को पॉप्युलेट करें और उल्का में चयनित मान के अनुसार फ़िल्टर करें

  4. स्प्रिंग बूट मानक UUID कोडेक AbstractMongoClientConfiguration के साथ काम नहीं कर रहा है

  5. MongoDB + Python - बहुत धीमी सरल क्वेरी