डेटाबेस में चैट संदेशों को संग्रहीत करने का सबसे अच्छा तरीका? [बन्द है]


82

मैं एक चैट ऐप बना रहा हूं और मैं चैट वार्तालाप में भेजे गए सभी संदेशों से पूर्ण इतिहास चाहता हूं। फिलहाल मैं प्रत्येक संदेश को 'संदेश' नामक तालिका में एक पंक्ति के रूप में संग्रहीत कर रहा हूं। मुझे पता है कि यह तालिका बहुत बड़ी हो सकती है क्योंकि 'हाय ’जैसे छोटे संदेशों का भी अपना डेटाबेस रिकॉर्ड होगा।

किसी को भी अधिक स्केलेबल mysql समाधान सुझा सकते हैं? मुझे व्यक्तिगत संदेशों को खोज योग्य, संपादन योग्य या हटाने योग्य बनाने की आवश्यकता नहीं है। क्या पूरी बातचीत को एक विशाल क्षेत्र में संग्रहीत किया जा सकता है?

आपके विचारों को सुनना पसंद करेंगे!


12
अगर इन संदेशों को खोज या संपादन योग्य होने की आवश्यकता नहीं है, तो डेटाबेस के अंदर रखने का कोई मतलब नहीं है
ajreal

21
मैं सलाह देना चाहता हूं कि आसान शुरू करें, सरल सोचें, रिलेशनल डेटाबेस का उपयोग करें, और अगर स्केलिंग एक मुद्दा बन जाए, तो इससे निपटें! बहुत से लोग ऐसे परिदृश्यों की परवाह करते हैं जो कभी घटित नहीं होंगे क्योंकि वे सही बुनियादी ढांचे के निर्माण में बहुत अधिक समय व्यतीत करते हैं और उनके पास इस बात पर ध्यान देने का समय नहीं होगा कि क्या महत्वपूर्ण है।
whirlwin

जवाबों:


47

डेटाबेस में पूरे इतिहास को सहेजने में कुछ भी गलत नहीं है, वे इस तरह के कार्यों के लिए तैयार हैं।

वास्तव में आप यहां स्टैक ओवरफ्लो में चैट के लिए एक उदाहरण स्कीमा का लिंक देख सकते हैं: उदाहरण

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


15

यदि आप एकल फ़ाइल के समवर्ती लिखने की आवश्यकता से बच सकते हैं, तो ऐसा लगता है कि आपको चैट संदेशों को संग्रहीत करने के लिए डेटाबेस की आवश्यकता नहीं है।

बस एक पाठ फ़ाइल (उपयोगकर्ता प्रति वार्तालाप 1 फ़ाइल) के लिए वार्तालाप को जोड़ दें। और एक निर्देशिका / फ़ाइल संरचना है

यहाँ फ़ाइल संरचना का एक सरलीकृत दृश्य है:

chat-1-bob.txt
        201101011029, hi
        201101011030, fine thanks.

chat-1-jen.txt
        201101011030, how are you?
        201101011035, have you spoken to bill recently?

chat-2-bob.txt
        201101021200, hi
        201101021222, about 12:22
chat-2-bill.txt
        201101021201, Hey Bob,
        201101021203, what time do you call this?

तब आपको केवल उपयोगकर्ता नाम, वार्तालाप आईडी (गाइड?) और फ़ाइल नाम के संदर्भ में स्टोर करने की आवश्यकता होगी।

मुझे लगता है कि आपको अधिक सरल मापनीय समाधान प्राप्त करना मुश्किल होगा।

आप LOAD_FILEडेटा को देखने के लिए भी उपयोग कर सकते हैं: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

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


1
यह शानदार लगता है। क्या कोई इस तर्क का मुकाबला कर सकता है?
ट्रिप

75
किसी फ़ाइल पर लिखना एक भयानक विचार है। अधिकांश सर्वर-साइड वातावरण या क्लस्टर में आप अपने 2 के अनुरोध की गारंटी नहीं दे पाएंगे, यहां तक ​​कि फ़ाइल के समान सर्वर पर भी समाप्त हो जाएगी। फ़ाइल सिस्टम लिखना बहुत धीमा है और I / O बाध्य है। क्षमा करें, मुझे विश्वास नहीं हो रहा है कि इसे इतने वोट मिले।
एंडी फुस्नीक

6
खेद है कि मैं वास्तव में इस सवाल का जवाब दे रहा था कि काल्पनिक परिदृश्य नहीं हैं। फिलहाल संदेश एक डेटाबेस के लिए बने हुए हैं, इसलिए एक साधारण फाइल सिस्टम बहुत धीमा क्यों लिखा जाएगा। इसके अलावा कृपया मेरे उत्तर को प्रति उपयोगकर्ता 1 वार्तालाप पढ़ें। (आपके काल्पनिक क्लस्टर पर मैंने एक FSA-SAN स्थापित किया है)। OP की आवश्यकता एक फ़ाइल में मौजूद मेरे दिमाग में लॉगिंग \ ऑडिट जैसी लगती है।
केविन बर्टन

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

3
ओपी स्पष्ट रूप से डेटाबेस में कहते हैं, इस भयानक विचार के अलावा, यह सवाल का जवाब नहीं देता है
ल्योनियल

2

आप एक्स वार्तालापों के लिए एक डेटाबेस बना सकते हैं जिसमें इन वार्तालापों के सभी संदेश शामिल हैं। यह आपको हर बार x से अधिक नया डेटाबेस (या सर्वर) जोड़ने की अनुमति देगा। X वह संख्या वार्तालाप है जो आपके बुनियादी ढांचे का समर्थन करता है (आपके हार्डवेयर, ... पर निर्भर करता है)।

समस्या अभी भी है, कि एक ही डेटाबेस पर बड़ी बातचीत (बहुत सारे संदेशों के साथ) हो सकती है। उदाहरण के लिए, आपके पास डेटाबेस ए और डेटाबेस बी एक स्टोर है जैसे 1000 वार्तालाप। यह संभव है कि सर्वर A पर सर्वर B (क्योंकि यह उपयोगकर्ता निर्मित सामग्री है) से कहीं अधिक "बड़ी" बातचीत हो। आप एक "मास्टर" डेटाबेस जोड़ सकते हैं जिसमें एक लुकअप होता है, जिस पर डेटाबेस / सर्वर एकल वार्तालाप पाया जा सकता है (या आपके पास हैश / मोडुलो या कुछ से एक डेटाबेस असाइन करने के लिए एक स्कीमा है)।

हो सकता है कि आप वास्तविक दुनिया के आर्किटेक्चर पा सकते हैं जो समान समस्याओं से निपटते हैं (आप पहले वाले नहीं हो सकते हैं), और जो पहले ही हल हो चुके हैं।

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