2012-06-03 22 views
5

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

इसके लिए सामान्य रणनीतियां क्या हैं? क्या आप इसे यूनियन-जैसे तरीके से विभाजित करते हैं, उदा।

index1: SELECT ... FROM table LIMIT 0, 1000 
index2: SELECT ... FROM table LIMIT 1000, 1000 
... 

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

उत्तर

10

शानदार सवाल।

स्फिंक्स एक स्थानीय सूचकांक खोज प्रति एक सीपीयू कोर और एक सूचकांक के निर्माण, जबकि

का अनुक्रमण आप के इंडेक्स है, तो आप एक ही समय में दो indexers चलाने के लिए और दो सीपीयू कोर उपयोग कर सकता है के लिए एक सीपीयू कोर का उपयोग कर रहा है। कृपया सावधान रहें कि इंडेक्सिंग आईओ गहन कार्य है इसलिए बहुत सारे इंडेक्सर्स न चलाएं।

एक बार जब आप दो (या अधिक) अनुक्रमित है आप खोज क्वेरी में उन सभी को उसका उल्लेख करके या इस तरह वितरित सूचकांक का उपयोग करके एक ही समय में उन्हें खोज सकते हैं:

index index_main 
{ 
     type   = distributed 
     local   = index1 
     local   = index2 
} 

जहां index1 और index2 अलग इंडेक्स हैं। इस मामले में आप index_main के खिलाफ खोज सकते हैं और स्फिंक्स दोनों अनुक्रमित

से आप एकत्रित परिणाम प्रदान करेगा के बारे में बंटवारे डेटा आप सभी तकनीकों आप सीमा के आधार पर बंटवारे रिकॉर्ड सहित चाहते उपयोग कर सकता है, हैश द्वारा या विशेषता मान और सभी से किसी भी संयोजन में ऊपर।

sql_query  = SELECT id, title, description FROM <my_table> WHERE (id % 2) = 0 

दूसरे के लिए::

पहले सूचकांक के लिए:

sql_query  = SELECT id, title, description FROM <my_table> WHERE (id % 2) = 1 

इस विधि कुछ कमियां भी हैं लेकिन

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

+0

अच्छा उत्तर +1। – Yavar

+0

धन्यवाद! उम्मीद है की यह मदद करेगा। – vfedorkov

+0

@ vfedorkov मैंने आपके द्वारा किए गए वही विधि का उपयोग किया, जिसमें एकाधिक इंडेक्स और मॉड्यूलस ऑपरेटर (%) का उपयोग किया गया .. लेकिन क्या आप कृपया हमें बता सकते हैं कि% ऑपरेटर के बारे में क्या मतलब है? हमारे पास 50 मिलियन से अधिक कीवर्ड हैं, मैंने इंडेक्सिंग करते समय इस ऑपरेटर का इस्तेमाल किया, लेकिन यह अच्छा लगता है .. हालांकि यह सूचकांक में लगभग 2 ~ 3 घंटे लग गए .. हमारे पास लगभग 8 इंडेक्स हैं, क्योंकि हम अपने सर्वर के लिए 8 कोर का उपयोग कर रहे हैं .. इसलिए मैंने आईडी% 8 = 1, आईडी% 8 = 2, आदि का उपयोग किया .. –