2012-05-11 17 views
26

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

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

वास्तुकला विचार?

उत्तर

27

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

  1. खोज को संभालने के लिए सर्वर कोड लिखें। जैसा कि आपने उल्लेख किया है, अनुक्रमण/खोज के लिए ज़िम्मेदार कुछ सर्वर कोड चलाने का सबसे आसान तरीका होगा। फायरबेस में एक नोड.जेएस क्लाइंट है, इसलिए यह फायरबेस में सेवा को इंटरफ़ेस करने का एक आसान तरीका होगा। सभी डाटा ट्रांसफर अभी भी फायरबेस के माध्यम से हो सकते हैं, लेकिन आप एक नोड.जेएस सेवा लिखेंगे जो कि फायरबेस में कुछ निर्दिष्ट स्थान पर क्लाइंट "सर्च अनुरोध" के लिए देखता है और फिर परिणाम को वापस फायरबेस में लिखकर "जवाब देता है" ग्राहक उपभोग करने के लिए।
  2. पोर्टबेज में इंडेक्स को स्वचालित रूप से अपडेट करने वाले ग्राहकों के साथ स्टोर करें। यदि आप वास्तव में चालाक होना चाहते हैं, तो आप सर्वर-कम योजना को कार्यान्वित करने का प्रयास कर सकते हैं, जहां ग्राहक स्वचालित रूप से अपने डेटा को लिखते हैं, जैसे कि वे इसे लिखते हैं ... इसलिए पूर्ण-पाठ खोज के लिए अनुक्रमणिका फायरबेस में संग्रहीत की जाएगी, और जब कोई ग्राहक संग्रह में एक नया आइटम लिखता है, यह उचित रूप से इंडेक्स को अपडेट करने के लिए ज़िम्मेदार होगा। और एक खोज करने के लिए, ग्राहक सीधे परिणाम सेट बनाने के लिए सूचकांक का उपभोग करेगा। यह वास्तव में सरल मामलों के लिए बहुत समझ में आता है जहां आप फायरबेस में संग्रहीत जटिल वस्तु के एक फ़ील्ड को इंडेक्स करना चाहते हैं, लेकिन पूर्ण-पाठ-खोज के लिए, यह शायद बहुत गहराई से होगा। :-)
  3. फ़ायरबेस में इंडेक्स को सर्वर कोड अपडेट करने के साथ स्टोर करें। आप हाइब्रिड दृष्टिकोण का प्रयास कर सकते हैं जहां इंडेक्स फायरबेस में संग्रहीत किया जाता है और सीधे ग्राहकों द्वारा खोज करने के लिए उपयोग किया जाता है, लेकिन क्लाइंट को इंडेक्स अपडेट करने के बजाय, आपके पास सर्वर कोड होगा जो इंडेक्स को अपडेट करता है जब भी नए आइटम जोड़े जाते हैं संग्रह। इस प्रकार, जब आपका सर्वर डाउन हो जाता है तो ग्राहक अभी भी डेटा खोज सकते हैं। जब तक आपका सर्वर इंडेक्सिंग पर नहीं पहुंच जाता तब तक वे केवल बालों के परिणाम प्राप्त कर सकते हैं।

जब तक फायरबेस के पास अधिक उन्नत क्वेरीिंग नहीं होती है, तो # 1 शायद आपका सबसे अच्छा शर्त है यदि आप थोड़ा सर्वर कोड चलाने के इच्छुक हैं। :-)

+1

ओह। बस अपनी टिप्पणी दोबारा पढ़ें कि आपका डेटा स्थिर है। उस स्थिति में, विकल्प # 2 आवश्यक नहीं है और विकल्प # 3 आसान हो जाता है। आपको अभी भी यह समझना होगा कि पूर्ण-पाठ-खोज अनुक्रमणिका कैसे बनाएं, इसे फ़ायरबेस में संग्रहीत करें, और क्लाइंट सीधे इसे पूछें, लेकिन पूरी तरह से करने योग्य होना चाहिए। –

+0

यह पुष्टि करने के लिए धन्यवाद कि मुझे कुछ स्पष्ट याद नहीं आया था।मुझे लगता है कि # 1 शायद जाने का सही तरीका है - जावास्क्रिप्ट में एक पूर्ण-पाठ अनुक्रमणिका को पुन: कार्यान्वित करना मेरे समय का अच्छा उपयोग नहीं लगता है :-) –

+0

http://lunrjs.com/ पर एक नज़र डालें एक पूर्ण जेएस आधारित पूर्ण-पाठ अनुक्रमण समाधान के लिए। – Nemo

0

पूर्ण पाठ खोज करने के लिए Google की वर्तमान विधि Algolia या BigQueryCloud Functions for Firebase के साथ समन्वयित प्रतीत होती है।

यहां फ़ायरबेस का Algolia Full-text search integration example है, और उनके BigQuery integration example जो पूर्ण खोज का समर्थन करने के लिए बढ़ाया जा सकता है।

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