हम स्थानिक / विशेषता प्रश्नों को चलाने के लिए Google AppEngine का उपयोग करते हैं और मुख्य मुद्दा (पहले दिन से) है कि कैसे मनमाने ढंग से आकार लाइनों / बहुभुज के बड़े सेटों को अनुक्रमित किया जाए। बिंदु डेटा बहुत मुश्किल नहीं है (जियोहैश, जियोमॉडल आदि देखें) लेकिन यादृच्छिक रूप से छोटे / बड़े बहुभुज के सेट हमेशा एक समस्या थी (और कुछ मामलों में, अभी भी है)
मैंने जीएई पर स्थानिक अनुक्रमण के कई अलग-अलग संस्करणों की कोशिश की है, लेकिन अधिकांश नीचे दो संस्करण हैं। SQL डेटाबेस के रूप में कोई भी तेजी से नहीं था और सभी के पास पेशेवरों / विपक्ष हैं। हालांकि ट्रेडऑफ़ अधिकांश इंटरनेट आधारित मैपिंग ऐप के लिए उचित लगता है। इसके अलावा, नीचे दिए गए दोनों को अंतिम खोज मापदंडों में फिट नहीं होने वाले किसी भी फीचर्स को हटाने के लिए इन-मेमोरी जियोमेट्री कलिंग (JTS आदि के माध्यम से) के साथ युग्मित करने की आवश्यकता है। और अंत में, वे जीएई विशिष्ट सुविधाओं पर भरोसा करते हैं, लेकिन मुझे यकीन है कि इसे अन्य आर्किटेक्चर पर लागू किया जा सकता है (या एक लिनक्स क्लस्टर, ईएक्स 2 आदि पर चलने के लिए टाइफूनएईए का उपयोग करें)
ग्रिड - एक निश्चित क्षेत्र के लिए सभी सुविधाओं को एक ज्ञात ग्रिड इंडेक्स में पैक करें। ग्रिड पर एक छोटा स्थानिक सूचकांक रखें ताकि आप उन सुविधाओं के सेट को जल्दी से नेविगेट कर सकें जिनमें यह शामिल है। अधिकांश प्रश्नों के लिए, आपको केवल मुट्ठी भर ग्रिडों को खींचना होगा, जो तेज हो, क्योंकि आपको सटीक ग्रिड नामकरण सम्मेलन पता है और यह K / V संस्थाओं से संबंधित है (प्रश्न नहीं मिलते हैं)
पेशेवरों - बहुत तेज़, लागू करने में आसान, कोई मेमोरी फ़ुटप्रिंट नहीं।
विपक्ष - पहले से आवश्यक, उपयोगकर्ता को ग्रिड आकार तय करने की आवश्यकता होती है, बड़े भूगर्भ कई ग्रिडों पर साझा किए जाते हैं, क्लस्टरिंग के कारण ग्रिड ओवरलोड हो सकते हैं, क्रमांकन / डीसेरिएलाइज़ेशन लागत एक मुद्दा हो सकता है (जब भी बफर के माध्यम से संकुचित किया जाता है)
QuadKeys - यह वर्तमान कार्यान्वयन है। मूल रूप से ग्रिड के रूप में ही है इसके अलावा ग्रिड स्तर नहीं है। जैसा कि सुविधाओं को जोड़ा जाता है, उन्हें क्वाडकी ग्रिड द्वारा अनुक्रमित किया जाता है जिसमें पूरी तरह से उनकी सीमाएं होती हैं (या कुछ मामलों में, दो में विभाजित हो जाती हैं जब एक भी क्वाडकी का उपयोग नहीं किया जा सकता है, डेटलाइन लगता है)। क्यूक पाए जाने के बाद, फिर इसकी अधिकतम संख्या को छोटे क्यूके में विभाजित किया जाता है जो कि सुविधा के महीन दाने का प्रतिनिधित्व प्रदान करते हैं। उस सुविधा के लिए एक पॉइंटर / बॉक्स को फिर एक हल्के ग्रिडिंडेक्स (सुविधाओं के समूह) में पैक किया जाता है, जिसे क्वेरी किया जा सकता है (एक मूल डिज़ाइन ने सुविधाओं को सीधे रूप से उद्धृत किया लेकिन यह उन मामलों में बहुत धीमा / सीपीयू गहन साबित हुआ जहां परिणाम बड़ा था)
Polyline Quadkeys http://www.arc2earth.com/images/help/GAE_QKS_1.png
बहुभुज Quadkeys http://www.arc2earth.com/images/help/GAE_QKS_2.png
ऊपर इस्तेमाल किया गया क्वाडकी नामकरण सम्मेलन अच्छी तरह से जाना जाता है और अधिक महत्वपूर्ण बात, स्थानीयता को संरक्षित करने के लिए जाता है ( यहां अधिक वर्णित है )
ऊपर का बहुभुज कुछ इस तरह दिखता है: 0320101013123 03201010131212 03201010131213 032010101313232 0320101013133 03201010131302 0320101013131 032010101313002 032010101313002 032010101313003 032010101313003 032010101313127 मोबाइल नंबर से संपर्क करें।
यदि क्वेरी सीमा काफी छोटी है, तो आप सीधे qk के माध्यम से ला सकते हैं। यह इष्टतम है क्योंकि इसकी एकमात्र एकल, बैच rpc कॉल GAE डेटॉल के लिए है। यदि सीमा पर्याप्त रूप से बड़ी है कि इसमें बहुत सारे संभावित qks (> 1000) शामिल हैं, तो आप वैकल्पिक रूप से एक फिल्टर (उदा: qk> = 0320101013 और qk <= 0320101013 + \ ufffd) का उपयोग करके क्वेरी कर सकते हैं। क्वाडकी नामकरण अधिवेशन और जिस तरह से जीएई अनुक्रमित तार ऊपर क्वेरी को केवल मौजूदा ग्रिडों को लाने की अनुमति देता है जो उस क्यू मूल्य से नीचे आते हैं।
अन्य चेतावनी और पूर्ण मुद्दे हैं, लेकिन सामान्य तौर पर, क्वाडकी पर क्वेरी करने की क्षमता है जो इसे संभव बनाती है
उदाहरण - यूएस काउंटियों पर क्वेरी: जियोजोन
पेशेवरों - बहुत तेज़, कोई ग्रिड आकार कॉन्फिगर नहीं, कोई मेमोरी फ़ुटप्रिंट नहीं, कोई भीड़-भाड़ वाला ग्रिड नहीं
विपक्ष - कुछ परिदृश्यों में, किसी भी ध्रुवीय डेटा के लिए आवश्यक ओवरप्रोस्किंग प्रीप्रोसेसिंग
स्पेस फिलिंग कर्व्स - इस साल Google I / O में अल्फ्रेड की नेक्स्टजेन क्वरीज पर एक नज़र डालें । नए मल्टीविके ऑपरेटर्स (समानांतर में रन) के साथ जेनेरिक स्पेस / टाइम फिलिंग कर्व्स को शामिल करने से कुछ वास्तव में शांत स्थानिक प्रश्नों की अनुमति मिलेगी। क्या यह पारंपरिक एसक्यूएल प्रदर्शन को हरा देगा? कहना मुश्किल है लेकिन यह वास्तव में अच्छी तरह से पैमाने पर होना चाहिए। और हम तेजी से एक ऐसे भविष्य की ओर अग्रसर हो रहे हैं, जहाँ हमेशा सभी आकार / आकार के मोबाइल उपकरणों पर नाटकीय रूप से आपकी साइट / सेवा के लिए यातायात बढ़ जाएगा।
अंत में, मैं यह भी मानूंगा कि आपको SQL पर NoSQL चुनने से पहले अपने समस्या डोमेन पर बहुत बारीकी से देखना चाहिए। हमारे मामले में, मुझे वास्तव में GAE का मूल्य निर्धारण मॉडल पसंद आया, इसलिए वास्तव में कोई विकल्प नहीं था लेकिन अगर आपको स्केल करने की आवश्यकता नहीं है, तो अपने आप को कुछ समय बचाएं और बस एक मानक sql db का उपयोग करें