मैं कई पूर्णांक विशेषताओं द्वारा वर्णित डेटाबेस में एक ऑब्जेक्ट संग्रहीत कर रहा हूं। वास्तविक वस्तु थोड़ा अधिक जटिल है, लेकिन अब मान लीजिए कि मैं अपने डेटाबेस में कारों को संग्रहीत कर रहा हूं। प्रत्येक कार में कार का वर्णन करने के लिए बहुत सारे पूर्णांक गुण होते हैं (यानी अधिकतम गति, व्हीलबेस, अधिकतम शक्ति इत्यादि) और ये उपयोगकर्ता द्वारा खोजे जा सकते हैं। उपयोगकर्ता प्रत्येक ऑब्जेक्ट के लिए एक पसंदीदा रेंज को परिभाषित करता है और चूंकि वहां बहुत सारे गुण हैं, इसलिए संभवतः सभी विशेषता श्रेणियों से मेल खाने वाली कोई भी कार नहीं होगी। इसलिए क्वेरी को सर्वश्रेष्ठ मैच द्वारा क्रमबद्ध कई कारों को वापस करना होगा।कौन सा डीबी सर्वोत्तम मिलान रिकॉर्ड खोजने के लिए चुनने के लिए चुनता है?
SELECT *, SQRT(POW((a < min_a)*(min_a - a) + (a > max_a)*(a - max_a), 2) +
POW((b < min_b)*(min_b - b) + (b > max_b)*(b - max_b), 2) +
...) AS match
WHERE a < (min_a - max_allowable_deviation) AND a > (max_a + max_allowable_deviation) AND ...
ORDER BY match ASC
जहां ए और बी वस्तु और min_a, max_a, min_b और max_b के गुण हैं उपयोगकर्ता निर्धारित मान रहे हैं:
फिलहाल मैं निम्न क्वेरी का उपयोग कर MySQL में यह लागू किया। असल में मिलान वांछित सीमा और विशेषता के वास्तविक मूल्य के बीच वर्ग अंतर के योग की वर्ग जड़ है। 0 का मान एक सही मिलान का अर्थ है।
तालिका में कुछ मिलियन रिकॉर्ड हैं और WHERE क्लॉजूल केवल गणना के रिकॉर्ड की संख्या को सीमित करने के लिए पेश किया गया है। एक सूचकांक सभी पूछताछ रिकॉर्ड पर रखा गया है और क्वेरी 500ms की तरह लेती है। मैं इस नंबर को बेहतर बनाना चाहता हूं और मैं इस क्वेरी को बेहतर बनाने के तरीकों की तलाश में हूं।
इसके अलावा मैं सोच रहा हूं कि इस काम को करने के लिए एक अलग डेटाबेस बेहतर अनुकूल होगा या नहीं। इसके अलावा मैं अपने लचीले डेटा स्कीम विकल्पों के कारण, नोएसक्यूएल डेटाबेस में बदलना चाहता हूं। मैं MongoDB में देख रहा हूं, लेकिन इस समस्या को कुशलतापूर्वक (तेज़) हल करने का कोई तरीका नहीं मिला।
क्या कोई डेटाबेस MySQL से इस नौकरी के लिए बेहतर अनुकूल है?
मैं याद कर रहा हूँ, जहाँ आप वास्तव में एक समस्या है - इस समय से पहले अनुकूलन की तरह लगता है ... –
आप एसक्यूएल सर्वर समीक्षा कर सकते हैं या ओरेकल की विचारों को इंडेक्स करने की क्षमता। एक दृश्य बनाएं जो पंक्तियों और उनके मैचों का वर्णन करता है और उन्हें अनुक्रमित करता है। –
@ ओएमजी: मुझे लगता है कि वह इस प्रकार की खोजों को ढूंढना चाहता है: 'कहां से चुनें मैक कैलकुलेशन (जहां अमीन और अमेक्स के बीच) और (बी बीटवेन और अधिकतम) ...' जो कुछ मिलियन रिकॉर्ड और 2 से अधिक खोज के साथ या बीटीआरई इंडेक्स के साथ अधिक विशेषताओं धीमी हो सकती है। –