PostgreSQL बनाम MySQL: स्थानिक सुविधा तुलना


15

हम एक वेब एप्लिकेशन बनाने की प्रक्रिया में हैं जिसमें एक स्थानिक डेटा घटक है। शुरुआत में हमारी स्थानिक डेटा तुलना एक दिए गए बिंदु को ले जाएगी और स्थानिक बहुभुजों से मेल खाते हुए मिलान लौटाएगी।

कहा जा रहा है, हमारे डेटाबेस में कई अन्य घटक हैं जो आपके सामान्य रिलेशनल डेटाबेस में आपको मिलने वाली सभी विशिष्ट चीजों को शामिल करते हैं।

हम अपनी परियोजना में उस बिंदु पर हैं जहां हमें चुनना होगा कि किस डेटाबेस समाधान का उपयोग करना है।

सभी परियोजना सदस्य MySQL के कार्यान्वयन और प्रशासन से अधिक परिचित हैं, फिर भी सभी शोध बताते हैं कि PostgreSQL बेहतर समाधान है - विशेष रूप से पोस्टजीआईएस का उपयोग करके स्थानिक डेटा के संबंध में।

हम उम्मीद करते हैं (आशा) कि हमारा एप्लिकेशन बहुत से समवर्ती उपयोगकर्ताओं के साथ बहुत अधिक कार्रवाई का अनुभव करेगा।

क्या किसी के साथ MySQL का उपयोग करने के अनुभव के साथ किसी स्थानिक डेटा घटक के साथ उनके RDBMS का कोई दीर्घकालिक सलाह / अनुभव है?

क्या परिचित के अपवाद के साथ PostGIS का उपयोग करने के कोई नुकसान हैं?


यदि आपने इसे नहीं देखा है, तो स्लैशडॉट पर एक समान प्रश्न है जो संभवतः अधिक ध्यान देगा।
जेपी १

जवाबों:


10

मैं MySQL के फायदे / नुकसान से बात नहीं कर सकता, लेकिन PostGIS कोड को व्यापक रूप से सबसे अच्छा (गति / कार्यक्षमता के मामले में) और सबसे परिपक्व (परीक्षण / वास्तविक दुनिया के एक्सपोजर के संदर्भ में) के रूप में माना जाता है ) उपलब्ध।

उदाहरण के लिए, Oracle से Postgres / PostGIS को अपने हवाई अड्डे के डेटाबेस (AeroNav और चार्ट को संकलित करने के लिए दूसरों द्वारा प्रयुक्त) पर FAA के कुछ लोगों द्वारा PGEast 2010 में एक बात हुई थी। AvationDB साइट भी Postgres (8.0) के शीर्ष पर बनाया गया है।

यदि जीआईएस से संबंधित प्रश्न आपके दिल में हैं कि आप मेरा सुझाव क्या कर रहे हैं तो पोस्टग्रैज के साथ जाना होगा। यह निश्चित रूप से सब कुछ संभाल सकता है जिसे आप सामान्य रूप से एक रिलेशनल डेटाबेस में भी करेंगे।


MySQL से स्विच बनाने के संदर्भ में, Postgres के पीछे प्रलेखन पहली दर है, और MySQL से Postgres पर स्विच करने के बारे में Oostgres Wiki का एक खंड भी है ।
प्रारंभिक सीखने की अवस्था थोड़ी सी खड़ी हो सकती है और आपको अपने डेटाबेस और किसी भी संग्रहीत प्रक्रियाओं (यदि आपने उन्हें MySQL के लिए पहले से लिखा है) को ट्वीक करने की आवश्यकता हो सकती है, लेकिन यह एक असंभव काम नहीं है।

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


एक तरफ के रूप में अगर कोई भी उस PGEast से स्लाइड को खोद सकता है तो मैं लगभग एक महीने से उनकी तलाश कर रहा हूं और उन्हें ढूंढ नहीं पा रहा हूं। Lousy USB ड्राइव मेरे डेटा के साथ भटक रहा है ...
voretaq7

क्या आपका यह मतलब था? postgresqlconference.org/2010/east/talks/… हालांकि स्लाइड देखने के लिए रजिस्टर करने की आवश्यकता है।
आरके

@ आरके हाँ , यह वह कड़ी है जिसकी मुझे तलाश है। और मुझे अपना उपयोगकर्ता नाम याद है! पार्टी!
voretaq7

हालांकि मुझे स्लाइड्स का लिंक नहीं मिला :(
RK

5

कुछ बहुत बड़ी चीजों की बात करना। यहां उन चीजों की एक सूची दी गई है जो पोस्टजीआईएस सपोर्ट करती हैं जो MySQL और MariaDB में पूरी तरह से अनुपस्थित हैं।

  • गणना में SRID, अपने अंक को एक अलग SRID दें और आपको अलग-अलग मान वापस मिलेंगे। यह अग्रगामी कार्य है: मेरे ज्ञान के सर्वश्रेष्ठ के लिए MySQL कोई स्थानिक समुच्चय नहीं प्रदान करता है

K निकटतम पड़ोसी: केवल PostGIS KNN का समर्थन करता है। किसी भी बिंदु का निकटतम बिंदु खोजें केवल एक सूचकांक का उपयोग करें: सभी बिंदुओं से दूरी की गणना करने की आवश्यकता नहीं है! एर। MySQL कल्पना को तोड़ता है और केवल जाँचता है कि दो मानों में एक ही SRID है। PostGIS सहज SRID जागरूकता को सक्षम करने के लिए pro4j परिभाषाओं के डेटाबेस के साथ आता है । एक SRID सेट करना और कॉल करना ST_Transform( एक फ़ंक्शन MySQL की कमी है ) आपके निर्देशांक को रद्द कर देगा।

MySQL में, सभी गणना वास्तविक SRID मान की परवाह किए बिना SRID 0 मान कर की जाती हैं। SRID 0 एक अनंत समतल कार्टेशियन विमान का प्रतिनिधित्व करता है जिसकी कुल्हाड़ियों को कोई इकाई नहीं दी गई है। भविष्य में, गणना निर्दिष्ट SRID मानों का उपयोग कर सकती है। SRID 0 व्यवहार सुनिश्चित करने के लिए, SRID 0. का उपयोग करके ज्यामिति मान बनाएँ। SRID 0 नए ज्यामिति मानों के लिए डिफ़ॉल्ट है यदि कोई SRID निर्दिष्ट नहीं है।

  • रेखापुंज : यहां रास्टर पीढ़ी से निष्कर्षण तक की एक टन विशेषताएं हैं। आप हीटमैप और इस तरह उत्पन्न कर सकते हैं।

  • भूगोल , PostGIS एक असुरक्षित भूगोल प्रकार का समर्थन करता है जो कार्टेशियन गणित का बिल्कुल भी उपयोग नहीं करता है। इसमें संबंधित कार्यों की एक पूरी धीमी गति है जो ओब्लेट स्फेयरोइड पर काम करते हैं। MySQL दो बिंदुओं से भौगोलिक SRS में बाउंडिंग बॉक्स भी नहीं बना सकता है।

  • टोपोलॉजी , वेक्टर ज्यामिति से अलग, टोपो जूम नोड्स और संबंधों को संग्रहीत करते हैं। एक नोड ले जाएँ, किनारे भी चलता है और आपको एक नया चेहरा मिलता है। यह किनारों को निर्देशित करने के लिए भी मजबूर करता है जो उन्हें रूटिंग के लिए आदर्श बनाता है। एक उप-बिंदु के रूप में PgRout जो भी करता है उसका 100% MySQL के लिए अनुपलब्ध है - इसलिए आप केवल इसके ऊपर एक Google मैप्स या इसके जैसा नहीं बना सकते हैं

  • जियोकोडिंग: कंट्रिब डायरेक्टरी में जियोकोडर एक्सटेंशन है जो उस डेटा को स्थापित करने के लिए जनगणना डेटा और एक लोडर से काम करता है।

  • पता मानकीकरण: एक ऐसा एक्सटेंशन है जो आसान पार्सिंग, भंडारण और तुलना के लिए सामान्यीकरण पते को संभालता है।

  • एसक्यूएल-MM सुविधाओं , तो आप बस नहीं मिलेगा CIRCULARSTRING COMPOUNDCURVE CURVEPOLYGON MULTICURVEया MULTISURFACEMySQL में।

  • nd cords: PostGIS 3dm, 3dz, और 4d आकृतियों और बिंदुओं का समर्थन कर सकता है जो MySQL बस नहीं कर सकता

  • MySQL केवल r- ट्री इंडेक्स का समर्थन करता है। PostGIS आर-ट्री (जिस्ट / जिन) और BRIN (बड़े ज्यामिति तालिकाओं के लिए) का समर्थन करता है

  • अलग-अलग कार्य: मेरे ज्ञान का सबसे अच्छा करने के लिए MySQL कोई स्थानिक समुच्चय कार्य प्रदान करता है

  • K निकटतम पड़ोसी: केवल PostGIS KNN का समर्थन करता है । किसी भी बिंदु के निकटतम बिंदु को सिर्फ एक सूचकांक का उपयोग करके खोजें: सभी बिंदुओं से दूरी की गणना करने की कोई आवश्यकता नहीं है!

  • अनुक्रमण। PostgreSQL आपको अपने स्थानिक सूचकांक (जो एक जिस्ट / जिन इंडेक्स है) पर किसी भी डेटा को स्टोर करने की अनुमति देता है। उदाहरण के लिए, आप year(या अन्य गैर-स्थानिक डेटा) और उसी सूचकांक geomपर संग्रहीत कर सकते हैं । यह कैसे करें के बारे में अधिक जानकारी के लिए देखें और ।btree_ginbtree_gist

इसके अलावा, संभवतः PostGIS द्वारा समर्थित 200 या अधिक कार्य हैं

संक्षेप में, MySQL ने PostGIS को अपना नहीं रखा है और वह इसे जानता है। PostGIS एक जानवर है। बस इस कुछ सामान की व्याख्या करना चाहता था।


0

मैं पहले उत्तर के सभी कथनों से पूरी तरह सहमत हूं, लेकिन अपने अनुभव को साझा करते हुए -मैंने इसे अपने देश के राष्ट्रीय सड़क प्रशासन: उत्पादन आलोचक, उच्च यातायात साइट पर बनाया है। मेरा सुझाव है कि एक वेब ऐप MySQL और PostgreSQL / PostGIS दोनों द्वारा फीड किया जाए।

सभी "विशिष्ट" सामानों के लिए, वेब ऐप MySQL आधारित CMS के साथ त्रुटिपूर्ण रूप से काम करता है। सभी स्थानिक कार्यों के लिए, समान वेब ऐप पोस्ट -reSQL / PostGIS ग्राउंड कस्टम विकास के साथ-साथ त्रुटिपूर्ण रूप से कार्य करता है;)। पहला घटक विकसित किया गया था और सामान्य MySQL कौशल के साथ सहजता से बनाए रखा गया है। दूसरे घटक में शुरुआत में थोड़ा अधिक शोध प्रयास शामिल था।

आपको न जाने-पहचाने PostgreSQL / PostGIS में विशिष्ट सामान के पूरे कार्यान्वयन को बाध्य करने की आवश्यकता नहीं है और आपको MySQL न में जियोस्पेशियल सामान के एक उप-कार्यान्वयन को मजबूर करने की आवश्यकता नहीं है। हर खिलाड़ी को खेलने दें जहां वह हिट हो सके।


2
मैं आम तौर पर एक दोहरे डेटाबेस के कार्यान्वयन से बचता हूँ जहाँ एक की बिल्कुल आवश्यकता नहीं होती है। दो अलग-अलग डेटाबेस इंजनों को स्थापित करने और बनाए रखने से आपको लंबे समय तक काम करने का मौका मिलता है, और परीक्षण का बोझ बढ़ता है। MySQL और Postgres के बीच " मामूली उपयोगिता" के दायरे में बहुत मामूली अंतर सीखना, एक बार के काम की अपेक्षाकृत कम मात्रा है और जब आप कर रहे हों तो क्लीनर आर्किटेक्चर के लिए बनाता है ...
voretaq7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.