इसलिए, मोंगो में डबल रेंज के प्रश्नों की सलाह नहीं दी जाती है। मुझे लगता है कि आपके पास एक ही अनुक्रमणिका है जिसमें {start_ip_num: 1, end_ip_num: 1}
दोनों शामिल हैं। .
यदि वह आपको पर्याप्त रूप से बंद नहीं करता है (अक्सर यह अभी भी धीमा है यदि आपके पास पहले फ़ील्ड द्वारा पर्याप्त डेटा लौटाया गया है, क्योंकि इसमें बहुत सी बी-पेड़ स्कैनिंग करना है), एक चाल है जो आप इसका मुकाबला करने के लिए कर सकते हैं 2D बॉक्स क्वेरी का उपयोग करना (एक समय में केवल दो श्रेणियों के लिए काम करता है)।
मूल रूप से, आप एक 2D जियो इंडेक्स को एक सरणी में दो बिंदुओं वाले फ़ील्ड पर रखते हैं, जैसे [start_ip, end_ip], और इसे एक उच्च पर्याप्त न्यूनतम/अधिकतम मान दें ताकि यह उन सीमाओं से न टकराए जो कि डिफ़ॉल्ट रूप से हैं -180/180.
अंत में, बॉक्स के एक कोने पर न्यूनतम से $lte मान तक जाने वाली सीमा और बॉक्स के दूसरे कोने पर gt और अधिकतम मान के साथ एक सीमा क्वेरी का उपयोग करें। देखें http://www.mongodb.org/display/DOCS/ Geospatial+Indexing#GeospatialIndexing-BoundsQueries वाक्य रचना के लिए।
यह कुछ इस तरह दिखता है:
db.ip_ranges.find({ip_range:{$within:{$box:[[0, 1204135028], [1204135028, max]]}}});
जहां अधिकतम आपके पास सबसे बड़ा आईपी हो सकता है।
जब से मैंने इसे देखा है, तब से कुछ समय हो गया है, इसलिए बॉक्स गलत हो सकता है, लेकिन अवधारणा ध्वनि है, और इसने डबल रेंज के प्रश्नों को नियमित दो फ़ील्ड बी-ट्री इंडेक्स की तुलना में थोड़ा बेहतर प्रदर्शन किया है। नियमित सूचकांक के साथ कुछ सेकंड की तुलना में लगातार एक सेकंड (हालांकि आमतौर पर कुछ सौ एमएस) के तहत - मुझे लगता है कि मेरे पास उस समय सैकड़ों लाखों दस्तावेज़ थे, लेकिन कुछ समय हो गया है इसलिए इन याद किए गए बेंचमार्क को अनाज के साथ लें नमक का। मुझे यकीन है कि आपके डेटा और श्रेणी के आकार के आधार पर परिणाम बहुत भिन्न होंगे।
अपडेट करें: आप bits
. के साथ प्रयोग करना चाह सकते हैं सेटिंग, कम संख्या और उच्च संख्या की कोशिश करके यह देखने के लिए कि क्या इससे कोई फर्क पड़ता है। मेरे लिए, यह औसतन प्रश्नों को प्रभावित नहीं करता था। देखें http://www.mongodb.org/display/DOCS/ Geospatial+Indexing#GeospatialIndexing-CreatingtheIndex
वाक्य रचना के लिए।