स्टैक ओवरफ्लो पर पूछे गए एक प्रश्न का पुन: पोस्ट जब यह सुझाव दिया गया कि यह एक बेहतर मंच होगा।
मैं एक डेटा सेट पर थोड़ा प्रयोग करने की कोशिश कर रहा हूं, जो भू-स्थानिक नहीं है, लेकिन इसे काफी अच्छी तरह से फिट करता है और परिणाम कुछ हद तक परेशान कर रहा है। डेटा सेट जीनोमिक डेटा है जैसे कि मानव जीनोम जहां हमारे पास डीएनए का एक क्षेत्र है जहां जीन जैसे तत्व विशिष्ट शुरुआत (हमारे एक्स अक्ष) को रोकते हैं। हमारे पास डीएनए (गुणसूत्र) के कई क्षेत्र हैं जो वाई अक्ष पर कब्जा करते हैं। लक्ष्य उन सभी वस्तुओं को वापस लाना है जो एक एकल Y समन्वय के साथ दो X निर्देशांक को पार करते हैं जैसे कि LineString (START 1, END 1)।
सिद्धांत ध्वनि लग रहा था इसलिए मैंने इसे एक मौजूदा MySQL आधारित जीनोम परियोजना में धकेल दिया और एक तालिका संरचना के साथ आया जैसे:
CREATE TABLE `spatial_feature` (
`spatial_feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`external_id` int(10) unsigned NOT NULL,
`external_type` int(3) unsigned NOT NULL,
`location` geometry NOT NULL,
PRIMARY KEY (`spatial_feature_id`),
SPATIAL KEY `sf_location_idx` (`location`)
) ENGINE=MyISAM;
external_id
उस इकाई की पहचानकर्ता का प्रतिनिधित्व करता है जिसे हमने इस तालिका में एन्कोड किया है और इस external_type
के स्रोत को एनकोड करता है। सबकुछ अच्छा लग रहा था और मैंने कुछ प्रारंभिक आंकड़ों (30,000 पंक्तियों) में धकेल दिया, जो अच्छी तरह से काम कर रहे थे। जब यह 3 मिलियन पंक्ति के निशान से बढ़ गया था तो MySQL ने स्थानिक सूचकांक का उपयोग करने से इनकार कर दिया था और जब इसे उपयोग करने के लिए मजबूर किया गया था तो धीमी थी (पूर्ण तालिका स्कैन का उपयोग करके 5 सेकंड बनाम 5 सेकंड)। जब अधिक डेटा जोड़ा गया तो इंडेक्स का उपयोग किया जाने लगा लेकिन प्रदर्शन पेनल्टी बनी रही। इंडेक्स को बंद करने के लिए क्वेरी को 8 सेकंड तक नीचे लाया गया। मैं जिस क्वेरी का उपयोग कर रहा हूं वह इस प्रकार है:
select count(*)
from spatial_feature
where MBRIntersects(GeomFromText('LineString(7420023 1, 7420023 1)'), location);
इसमें जाने वाला डेटा Y आयामों के साथ बहुत घना है (इसे इस तरह समझें जैसे आपने हर इमारत की स्थिति, टेलीफोन बॉक्स, पोस्ट बॉक्स और कबूतर को बहुत लंबी सड़क पर दर्ज किया है)। मैंने परीक्षण किया है कि आर-इंडेक्स जावा में इस डेटा के साथ कैसे व्यवहार करता है और साथ ही साथ क्षेत्र के अन्य लोगों ने उन्हें सफलता के लिए फ्लैट-फाइल स्वरूपों में लागू किया है। हालाँकि किसी ने उन्हें डेटाबेस AFAIK पर लागू नहीं किया है जो इस परीक्षण का लक्ष्य है।
क्या वहाँ किसी ने एक समान व्यवहार देखा है जब बड़ी मात्रा में डेटा को एक स्थानिक मॉडल में जोड़ा जाता है जो एक विशेष अक्ष के साथ बहुत अलग नहीं है? यदि मैं समन्वय उपयोग को उलट देता हूं तो समस्या बनी रहती है। मैं निम्नलिखित सेटअप चला रहा हूँ अगर यह एक कारण है
- MacOS 10.6.6
- MySQL 5.1.46