2009-10-29 12 views
5

का उपयोग किए बिना मैं अलग-अलग स्रोतों से विभिन्न डेटा के साथ एक बड़ा डेटाबेस (2+ मिलियन पंक्तियां) बनाने की योजना बना रहा हूं। मैं प्रतिकृति के साथ सिंक समस्याओं के खिलाफ रोकने में मदद के लिए auto_increment ids के आसपास डेटाबेस को संरक्षित करना चाहता हूं, और यह भी कि प्रत्येक आइटम डालने के लिए एक अल्फान्यूमेरिक उत्पाद कोड होगा जो अद्वितीय होने की गारंटी है - ऐसा लगता है कि इसके बजाय मुझे इसका अधिक उपयोग करना लगता है।स्पिंक्स एक auto_increment id

मैं इस डेटाबेस को इंडेक्सिंग रिलेशनल डेटाबेस के आसपास अपने डिजाइन के कारण स्पिंक्स के साथ इस डेटाबेस को इंडेक्स करने के लिए एक खोज इंजन देख रहा हूं। हालांकि, विभिन्न ट्यूटोरियल और दस्तावेज़ीकरण को देखते हुए डेटाबेस डिज़ाइन एक फॉर्म या दूसरे में एक auto_increment फ़ील्ड पर निर्भर करते हैं और दस्तावेज में bold statement पर निर्भर करते हैं कि दस्तावेज़ आईडी केवल 32/64 बिट पूर्णांक या चीजें तोड़नी चाहिए।

क्या स्पिनक्स द्वारा स्वचालित रूप से आईडी के रूप में auto_increment फ़ील्ड के बिना अनुक्रमित डेटाबेस रखने का कोई तरीका है?

उत्तर

3

स्फिंक्स केवल ids को पूर्णांक और अद्वितीय होने की आवश्यकता है, यह परवाह नहीं है कि वे ऑटो वृद्धि हुई हैं या नहीं, तो आप अपना तर्क प्रस्तुत कर सकते हैं। उदाहरण के लिए, अपनी स्ट्रिंग कुंजियों के लिए पूर्णांक हैश उत्पन्न करें।

+0

पर एक नजर डालें मुझे लगता है कि दृष्टिकोण के साथ टकराने आईडी होने के बारे में थोड़ा चिंतित हूँ - या हो सकता है मैं तुम्हें गलत पढ़ा है? – squeeks

+1

क्या एक विचार डालने के समय unixtime + microtime का उपयोग करना होगा? इसके बाद मैं इसे सम्मिलन के साथ-साथ दस्तावेज़ आईडी, एक पत्थर वाले दो पक्षियों के रूप में उपयोग कर सकता था। – squeeks

+0

मुझे लगता है कि कोशिश करने के लायक एक अच्छा विचार होगा। चीयर्स। – squeeks

1

स्फिंक्स ऑटो वृद्धि पर निर्भर नहीं है, केवल अद्वितीय पूर्णांक दस्तावेज़ आईडी की आवश्यकता है। शायद आप स्फिंक्स के साथ काम करने के लिए तालिकाओं में एक सरोगेट अद्वितीय पूर्णांक आईडी प्राप्त कर सकते हैं। चूंकि यह ज्ञात है कि पूर्णांक खोज अल्फान्यूमेरिक खोजों की तुलना में तेज़ी से होती हैं। बीटीडब्ल्यू आपका अल्फान्यूमेरिक उत्पाद कोड कितना समय है? कोई नमूने?

+0

वे लंबाई में 4 से 13 वर्णों की लंबाई में भिन्न होते हैं। – squeeks

17

निश्चित - यह काम करना आसान है। तुम सिर्फ स्फिंक्स के लिए स्वयं अपनी आईडी बनाने के लिए की जरूरत है और आप उन्हें टकराने नहीं करना चाहते, तो आप अपने sphinx.conf (MySQL के लिए उदाहरण कोड) में कुछ इस तरह कर सकते हैं

source products { 

    # Use a variable to store a throwaway ID value 
    sql_query_pre = SELECT @id := 0 

    # Keep incrementing the throwaway ID. 
    # "code" is present twice because Sphinx does not full-text index attributes 
    sql_query = SELECT @id := @id + 1, code AS code_attr, code, description FROM products 

    # Return the code so that your app will know which records were matched 
    # this will only work in Sphinx 0.9.10 and higher! 
    sql_attr_string = code_attr 
} 

केवल समस्या यह है कि आपको अभी भी यह जानने का एक तरीका चाहिए कि आपकी खोज से कौन से रिकॉर्ड मेल खाते थे। स्फिंक्स आईडी को वापस कर देगा (जो अब अर्थहीन है) प्लस कोई भी कॉलम जिसे आप "गुण" के रूप में चिह्नित करते हैं।

स्फिंक्स 0.9.10 और ऊपर खोज परिणामों के हिस्से के रूप में आपके उत्पाद कोड को वापस करने में सक्षम होंगे क्योंकि इसमें स्ट्रिंग विशेषताएँ समर्थन हैं।

0.9.10 अभी तक एक आधिकारिक रिलीज नहीं है लेकिन यह शानदार दिख रहा है। यह Zawodny is running it over at Craig's List जैसा दिखता है, इसलिए मैं इस सुविधा पर भरोसा करने के बारे में बहुत परेशान नहीं होगा।

1

मुझे लगता है कि आपके डेटा से एक्सएमएल स्ट्रीम उत्पन्न करना संभव है। फिर सॉफ्टवेयर (रूबी, जावा, PHP) के माध्यम से आईडी बनाएं।

http://github.com/burke/mongosphinx

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

  • कोई संबंधित समस्या नहीं^_^