2008-12-01 15 views
12

मैं यह देखने की कोशिश कर रहा हूं कि किसी को डेटाबेस पर तार पर भेजे गए परिणामों की संख्या को कम करने के लिए डेटाबेस का उपयोग करके कुछ लेट/लांग परिणाम कैसे क्लस्टर करना है या नहीं।डेटाबेस में लेट/लांग क्लस्टरिंग

वहाँ या तो ग्राहक के पक्ष या सर्वर (आवेदन) पक्ष में, कैसे का समूह बनाने के बारे में कई संसाधन हैं .. लेकिन डेटाबेस पक्ष :(

This is a similar question, एक साथी अतः सदस्य ने पूछा में नहीं समाधान सर्वर पक्ष आधारित हैं (यानी सी # कोड पीछे)

क्या किसी को यह हल करने के साथ कोई भाग्य या अनुभव है, लेकिन डेटाबेस में? क्या कोई डेटाबेस गुरु है जो एक हौट और सेक्सी डीबी के बाद है चुनौती?

कृपया मदद करें :)

संपादित करें 1: स्पष्टीकरण - क्लस्टरिंग द्वारा, मैं एक क्षेत्र के लिए x अंक की संख्या को एक बिंदु में समूहित करने की उम्मीद कर रहा हूं। इसलिए, यदि मैं क्लस्टर सब कुछ 1 मील/1 किमी वर्ग में कहता हूं, तो उस 'वर्ग' के सभी परिणाम एक ही परिणाम में समूह (डी ... वर्ग के बीच में) हैं।

संपादित 2: मैं एमएस एसक्यूएल 2008 का उपयोग कर रहा हूं, लेकिन अगर मैं अन्य डीबी में अन्य समाधान कर रहा हूं तो मैं सुनकर खुला हूं।

+0

आप वास्तव में क्या देख रहे हैं - डेटा सेट को अच्छी तरह से प्रस्तुत करने वाले लेट/लम्बे बिंदुओं का एक कम सेट, किसी दिए गए "परीक्षण" बिंदु के पास बिंदुओं का एक सेट, या पूरी तरह से कुछ और? –

+0

उद्घाटन पोस्ट में स्पष्टीकरण जोड़ा गया। –

+0

मुझे एक ही समस्या है। क्या आपको कोई समाधान मिला? – shizik

उत्तर

12

मैं शायद आपके अंक के लिए कार्टशियन (उदा। डब्लूजीएस -84 ईसीएफ) निर्देशांक का उपयोग करके k-means clustering के संशोधित * संस्करण का उपयोग करूंगा। & को कार्यान्वित करना आसान है, और आपके डेटा को अपनाना चाहे इससे कोई फर्क नहीं पड़ता। इसके अलावा, आप कश्मीर अपने बैंडविड्थ आवश्यकताओं के अनुरूप चुन सकते हैं, और प्रत्येक क्लस्टर संबद्ध अंक की एक ही नंबर (आधुनिक ट) होगा।

मैं क्लस्टर सेंट्रॉइड की एक तालिका बनाउंगा, और यह इंगित करने के लिए मूल डेटा तालिका में एक फ़ील्ड जोड़ूं कि यह किस समूह से संबंधित है। यदि आपका डेटा सभी गतिशील है तो आप निश्चित रूप से क्लस्टरिंग को समय-समय पर अपडेट करना चाहते हैं। मुझे नहीं पता कि क्या आप संग्रहीत प्रक्रिया & ट्रिगर के साथ ऐसा कर सकते हैं, लेकिन शायद।

* "संशोधन" गणना की गई सेंट्रॉइड वैक्टर की लंबाई को समायोजित करना होगा ताकि वे पृथ्वी की सतह पर हों। अन्यथा आप नकारात्मक ऊंचाई वाले बिंदुओं के समूह के साथ समाप्त हो जाएंगे (जब एलएलएच में परिवर्तित हो जाते हैं)।

+0

kewlies! ... er .. मुझे नहीं पता कि यह कैसे करना है .. लेकिन मैं जो कह रहा हूं उसे प्राप्त करें। हम्म .. डेटा बहुत गतिशील नहीं है। लेकिन मुझे अभी भी इस बारे में सोचना होगा कि (और कितनी बार) मुझे इस सामान को कैल्क करने की आवश्यकता होगी। हम्म। इतना कठिन! –

5

यदि आप भौगोलिक स्थान पर क्लस्टरिंग कर रहे हैं, और मैं कल्पना नहीं कर सकता कि यह कुछ और है :-), आप डेटाबेस में "क्लस्टर आईडी" को लेट/लांग समन्वय के साथ स्टोर कर सकते हैं।

मेरा मतलब है कि विश्व मानचित्र को (उदाहरण के लिए) 100x100 मैट्रिक्स (10,000 क्लस्टर) में विभाजित करना है और प्रत्येक समन्वय उन क्लस्टर में से एक को सौंपा जाता है।

फिर, आप समान वर्गों में उन लोगों को चुनकर बहुत करीबी निर्देशांक का पता लगा सकते हैं जो निकटवर्ती वर्गों में से चुनकर उन्हें बंद कर सकते हैं।

अपने वर्गों के माप (और इसलिए उन्हें की संख्या) कितना सटीक आप क्लस्टरिंग की जरूरत होने के लिए द्वारा निर्णय लिया जाएगा। जाहिर है, अगर आपके पास केवल 2x2 मैट्रिक्स है, तो आप समन्वय के कुछ क्लस्टरिंग प्राप्त कर सकते हैं जो एक लंबा रास्ता अलग है।

यो हमेशा बढ़त मामलों जैसे दो अंक के करीब एक साथ लेकिन अलग अलग समूहों में (अपने क्लस्टर में एक उत्तरी, अपने में अन्य दक्षिणी) होगा, लेकिन आप क्लस्टर आकार या बाद प्रक्रिया पर परिणामों को समायोजित कर सकता है ग्राहक पक्ष।

+0

एमएस एसक्यूएल सर्वर 2008 के साथ, उनके पास स्थानिक इंडेक्स हैं। हो सकता है कि इन इंडेक्स में से एक को क्लस्टरआईड के रूप में इस्तेमाल किया जा सके, फिर समूह को इस क्लस्टर आईडी में परिणाम दिया जा सकता है? –

3

मैंने भौगोलिक अनुप्रयोग के लिए एक ही चीज़ की थी जहां मैं यह सुनिश्चित करना चाहता था कि मैं आसानी से कैश पॉइंट सेट कर सकता हूं। मेरे geohashing कोड इस तरह दिखता है:

def compute_chunk(latitude, longitude) 
    (floor_lon(longitude) * 0x1000) | floor_lat(latitude) 
end 

def floor_lon(longitude) 
    ((longitude + 180) * 10).to_i 
end 

def floor_lat(latitude) 
    ((latitude + 90) * 10).to_i 
end 

सब कुछ वहाँ से वास्तव में आसान हो गया। मेरे पास दिए गए बिंदु से दिए गए बिंदु से दिए गए बिंदु से सभी हिस्सों को पकड़ने के लिए कुछ कोड था जो एक एकल मेमकेचे मल्टीगेट में अनुवाद करेगा (और कुछ कोड बैकफिल करने के लिए जब यह गायब था)।

+0

हाय डस्टिन - मुझे यह नहीं मिला। क्या यह कुछ प्रकार का डीबी एसक्यूएल कोड है? या कुछ PHP या कुछ? मैं नहीं देख सकता कि यह एक डीबी से कैसे संबंधित है? –

+0

मेरा ऐप रूबी में लिखा गया है और यह लाइब्रेरी कोड है। मैं इसे दिए गए अक्षांश और देशांतर के लिए हैश की गणना करने के लिए उपयोग करता हूं और उस बिंदु के साथ कॉलम में स्टोर करता हूं। प्रत्येक बिंदु संपादन हैश को पुन: गणना करता है और किसी दिए गए हैश के लिए सभी बिंदुओं के कैश को अमान्य करता है। – Dustin

2

movielandmarks.com के लिए मैंने Mike Purvis से क्लस्टरिंग कोड का उपयोग किया, Beginning Google Maps Applications with PHP and AJAX के लेखकों में से एक। यह PHP और MySQL का उपयोग करके विभिन्न ज़ूम स्तरों के लिए क्लस्टर/अंक के पेड़ बनाता है, इसे डेटाबेस में संग्रहीत करता है ताकि याद किया जा सके। यदि आप एक अलग डेटाबेस का उपयोग कर रहे हैं तो भी इसमें से कुछ उपयोगी हो सकते हैं।

+0

ब्रायन - मुझे कोड नहीं मिला ??? :( –

+0

अगर किसी ने Google से यहां किया है तो इसे पोस्ट करना .. आप archive.org का उपयोग करके उपरोक्त वर्णित धागा पा सकते हैं (http://web.archive.org/web/20071011143643/http://forum .sydphp.org /? a = topic & t = 1074) - इसमें स्रोत फ़ाइलों के लिंक शामिल हैं। भारी भारोत्तोलन php tho के माध्यम से किया जाता है - शायद सबसे अच्छा तरीका नहीं, लेकिन पढ़ने के लायक है। – Chris

0

मेरा मानना ​​है कि आप MSSQL's spatial data types का उपयोग कर सकते हैं। यदि वे अन्य स्थानिक डेटा प्रकारों के समान हैं, तो मुझे पता है कि वे आयतों के पेड़ में अपने अंक संग्रहीत करेंगे, और फिर आप निहित क्लस्टर प्राप्त करने के लिए निचले-रिज़ॉल्यूशन आयत पर जा सकते हैं।

+0

मैं वर्तमान में भौगोलिक प्रकार का उपयोग कर रहा हूं एक स्थानिक सूचकांक के साथ। लेकिन मुझे यकीन है कि समूहबद्ध/क्लस्टर परिणाम प्राप्त करने के लिए इसका उपयोग कैसे करें। क्या आपके पास कुछ एसक्यूएल कोड उदाहरण हैं? –

+0

मैं यह मानने में गलत था कि भौगोलिक रूप से आपको एक पेड़ देता है। मुझे विश्वास है केई साधनों के लिए आवश्यक दूरी समारोह के रूप में GEOGRAPHY.STDistance का उपयोग करके ड्रू हॉल के सुझाव का उपयोग कर सकते हैं। –

1

एकाधिक दृष्टिकोणों का परीक्षण क्यों नहीं करते?

  1. IKVM.NET
  2. साथ नेट CLI में weka पुस्तकालय का अनुवाद एक विधानसभा जोड़ने के कुछ परीक्षण बनाओ

अपने डेटाबेस में अपने कोड और weka.dll (उपयोग ilmerge) से हुई, कि है। कोई विशिष्ट क्लस्टरिंग किसी और से बेहतर काम नहीं करता है।

+0

व्हाउ दोस्त। मुझे नहीं पता कि आपका क्या मतलब है :( –

+0

क्लस्टरिंग के लिए कई एल्गोरिदम हैं।प्रत्येक एल्गोरिदम के अपने पैरामीटर होते हैं। सबसे अच्छा जवाब प्रदान करना काफी असंभव है। वेका लाइब्रेरी से कुछ क्लस्टरिंग एल्गोरिदम (के-साधन, फ़ज़ी-सी साधन आदि) का परीक्षण करें। पूरे कोड का अनुवाद न करने के लिए, आप एक असेंबली को एम्बेड कर सकते हैं जिसमें आपके डेटाबेस सर्वर में वीका शामिल है (एसक्यूएल 2008 .NET असेंबली स्वीकार करता है)। इस प्रकार, आप कई प्रकारों का परीक्षण कर सकते हैं। – lmsasu

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