PostgreSQL เทียบกับ MySQL: การเปรียบเทียบคุณสมบัติเชิงพื้นที่


15

เรากำลังอยู่ระหว่างการสร้างเว็บแอปพลิเคชันที่มีองค์ประกอบข้อมูลเชิงพื้นที่ ในการเริ่มต้นการเปรียบเทียบข้อมูลเชิงพื้นที่ของเราจะใช้จุดที่กำหนดและกลับมาจับคู่รูปหลายเหลี่ยมเชิงพื้นที่ที่ทับซ้อนกัน

ดังที่กล่าวไปแล้วฐานข้อมูลของเรามีส่วนประกอบอื่น ๆ มากมายซึ่งรวมถึงสิ่งทั่วไปที่คุณจะพบในฐานข้อมูลเชิงสัมพันธ์ทั่วไปของคุณ

เราอยู่ในจุดที่โครงการของเราต้องเลือกโซลูชันฐานข้อมูลที่จะใช้

สมาชิกโครงการทุกคนมีความคุ้นเคยกับการใช้และการบริหารจัดการของ MySQL มากขึ้น แต่งานวิจัยทั้งหมดชี้ให้เห็นว่า PostgreSQL เป็นทางออกที่ดีกว่าโดยเฉพาะอย่างยิ่งในเรื่องข้อมูลเชิงพื้นที่โดยใช้ postGIS

เราคาดหวัง (ความหวัง) แอปพลิเคชันของเราจะได้สัมผัสกับการกระทำมากมายกับผู้ใช้จำนวนมาก

ใครบ้างที่มีประสบการณ์การใช้ MySQL เป็น RDBMS ของพวกเขาที่มีองค์ประกอบข้อมูลเชิงพื้นที่มีคำแนะนำ / ประสบการณ์ระยะยาวหรือไม่?

มีข้อเสียของการใช้ PostGIS ยกเว้นความคุ้นเคยหรือไม่?


ในกรณีที่คุณไม่ได้เห็นมีคำถามคล้ายกันในslashdotที่อาจจะได้รับความสนใจมากขึ้น
jp

คำตอบ:


10

ฉันไม่สามารถพูดกับข้อดี / ข้อเสีย vis-a-vis MySQL ได้ แต่โค้ด PostGIS นั้นได้รับการยอมรับอย่างกว้างขวางว่าเป็นหนึ่งในดีที่สุด (ในแง่ของความเร็ว / ฟังก์ชันการทำงาน) และเป็นผู้ใหญ่ที่สุด (ในแง่ของการทดสอบ / การสัมผัสโลกแห่งความจริง) มี)

ตัวอย่างเช่นมีการพูดคุยที่ PGEast 2010 โดยผู้ใช้งานจาก FAA ในการแปลงฐานข้อมูลสนามบิน (ใช้โดย AeroNav และอื่น ๆ เพื่อรวบรวมแผนภูมิ) เป็น Postgres / PostGIS จาก Oracle เว็บไซต์ avationDB
ถูกสร้างขึ้นยังด้านบนของ Postgres (8.0)

หากการสืบค้นที่เกี่ยวข้องกับ GIS นั้นเป็นหัวใจของสิ่งที่คุณกำลังทำตามคำแนะนำของฉันก็คือการไปกับ Postgres แน่นอนมันสามารถจัดการทุกอย่างอื่นที่คุณปกติจะทำในฐานข้อมูลเชิงสัมพันธ์เช่นกัน


ในแง่ของการเปลี่ยนจาก MySQL ที่เอกสารที่อยู่เบื้องหลัง Postgres เป็นอัตราแรกและนอกจากนี้ยังมีส่วนของ Oostgres วิกิพีเดียเกี่ยวกับการเปลี่ยนจาก MySQL เพื่อ Postgres
เส้นโค้งการเรียนรู้เริ่มต้นอาจจะค่อนข้างชันและคุณอาจต้องปรับแต่งฐานข้อมูลของคุณและขั้นตอนการจัดเก็บใด ๆ (ถ้าคุณเขียนลงใน MySQL แล้ว) แต่มันไม่ใช่ภารกิจที่ผ่านไม่ได้

คุณควรจะพอที่จะทำให้การเปลี่ยนในเวลาสองสามสัปดาห์และถ้าคุณตั้งค่าฐานข้อมูลการพัฒนาคุณสามารถรอบรู้ในงานประจำภายในหนึ่งเดือนและมั่นใจว่าคุณรู้ที่จะดูในคู่มือ สำหรับคนที่ไม่ธรรมดา


นอกจากว่าถ้าใครสามารถขุดสไลด์จากการพูดคุยของ PGEast ฉันกำลังมองหาพวกเขาประมาณหนึ่งเดือนแล้วและไม่สามารถหาพวกเขาได้ Lousy ไดรฟ์ USB หลงทางกับข้อมูลของฉัน ...
voretaq7

คุณหมายถึงสิ่งนี้หรือไม่ postgresqlconference.org/2010/east/talks/… ต้องลงทะเบียนเพื่อดูสไลด์แม้ว่า
RK

@RK YESนั่นคือลิงค์ที่ฉันต้องการ และฉันจำชื่อผู้ใช้ของฉันได้! PARTY!
voretaq7

ฉันหาลิงค์สำหรับสไลด์ไม่ได้ :(
RK

5

การพูดถึงสิ่งสำคัญบางอย่าง นี่คือรายการของสิ่งที่ PostGIS รองรับซึ่งขาดโดยสิ้นเชิงใน MySQL และ MariaDB

  • SRID ในการคำนวณให้คะแนน SRID ที่แตกต่างกันและคุณจะได้รับค่าต่างกัน นี่คือฟังก์ชั่น Prop รวม: ที่ดีที่สุดของความรู้ของฉัน MySQL ไม่มีฟังก์ชั่นการรวมเชิงพื้นที่

K เพื่อนบ้านที่ใกล้ที่สุด: เฉพาะ PostGIS เท่านั้นที่สนับสนุน KNN ค้นหาจุดที่ใกล้ที่สุดไปยังจุดใด ๆ ที่ใช้เพียงดัชนี: ไม่จำเป็นต้องคำนวณระยะทางจากทุกจุด! MySQL มีการแบ่งข้อมูลจำเพาะและตรวจสอบเพียงว่ามีสองค่าที่มี SRID เดียวกัน PostGIS มาพร้อมกับฐานข้อมูลของคำจำกัดความ pro4jเพื่อเปิดใช้งานการรับรู้ SRID ที่ไร้รอยต่อ การตั้งค่า SRID และการโทรST_Transform( ฟังก์ชั่นขาด MySQL ) จะปฏิเสธการประสานงานของคุณ

ใน MySQL การคำนวณทั้งหมดเสร็จสิ้นสมมติว่า SRID 0 โดยไม่คำนึงถึงค่า SRID ที่แท้จริง SRID 0 หมายถึงระนาบคาร์ทีเซียนแบบแบนไม่ จำกัด ที่ไม่มีหน่วยกำหนดให้กับแกน ในอนาคตการคำนวณอาจใช้ค่า SRID ที่ระบุ เพื่อให้แน่ใจว่าพฤติกรรม SRID 0 สร้างค่าเรขาคณิตโดยใช้ SRID 0 SRID 0 เป็นค่าเริ่มต้นสำหรับค่าเรขาคณิตใหม่หากไม่มีการระบุ SRID

  • Rasters : มีฟีเจอร์มากมายตั้งแต่การสร้างแรสเตอร์จนถึงการสกัด คุณสามารถสร้าง heatmaps และสิ่งที่คล้ายกัน

  • ภูมิศาสตร์ PostGIS สนับสนุนประเภทภูมิศาสตร์ที่ไม่ได้ใช้ซึ่งไม่ได้ใช้คณิตศาสตร์คาร์ทีเซียนเลย มันมีฟังก์ชั่นที่เกี่ยวข้องที่ช้าซึ่งทำงานกับทรงกลม oblate MySQL ไม่สามารถสร้างกล่องขอบเขตใน SRS เชิงภูมิศาสตร์ได้จากจุดสองจุด

  • โทโพโลยีแตกต่างจากรูปทรงเรขาคณิตของเวกเตอร์โทโพโลจีที่เก็บโหนดและความสัมพันธ์ ย้ายโหนดและขอบก็จะได้รับส่วนใหม่ สิ่งนี้ยังบังคับให้ขอบถูกกำหนดทิศทางซึ่งทำให้เหมาะสำหรับการจัดเส้นทาง ในฐานะที่เป็นจุดย่อย 100% ของสิ่งที่PgRoutingใช้ไม่ได้กับ MySQL ดังนั้นคุณไม่สามารถสร้าง Google แผนที่หรือสิ่งที่ชอบได้

  • Geocoding: มีgeocoder exstensionอยู่ในไดเรกทอรี contrib ที่ปิดข้อมูลสำมะโนและโหลดเดอร์เพื่อติดตั้งข้อมูลนั้น

  • การกำหนดมาตรฐานที่อยู่: มีส่วนขยายที่จัดการการทำให้เป็นมาตรฐานสำหรับการแยกวิเคราะห์จัดเก็บและการเปรียบเทียบได้ง่าย

  • คุณสมบัติ SQL-MMคุณจะไม่พบCIRCULARSTRING COMPOUNDCURVE CURVEPOLYGON MULTICURVEหรือMULTISURFACEใน MySQL

  • nd สาย: PostGIS สามารถรองรับ 3dm, 3dz, และ 4d รูปร่างและคะแนน MySQL ไม่สามารถทำได้

  • MySQL รองรับเฉพาะดัชนี r-tree เท่านั้น PostGIS รองรับ r-tree (gist / gin) และ BRIN (สำหรับตารางเรขาคณิตขนาดใหญ่)

  • ฟังก์ชั่นรวม: ที่ดีที่สุดของความรู้ของฉัน MySQL ไม่มีฟังก์ชั่นการรวมเชิงพื้นที่

  • K เพื่อนบ้านที่ใกล้ที่สุด: เฉพาะPostGIS สนับสนุน KNN ค้นหาจุดที่ใกล้ที่สุดไปยังจุดใด ๆ ที่ใช้เพียงดัชนี: ไม่จำเป็นต้องคำนวณระยะทางจากทุกจุด!

  • การจัดทำดัชนี PostgreSQL ช่วยให้คุณสามารถเก็บข้อมูลใด ๆ ในดัชนีอวกาศของคุณ (ซึ่งเป็นดัชนีส่วนแบ่ง / gin) ตัวอย่างเช่นคุณสามารถจัดเก็บyear(หรือข้อมูลอื่น ๆ ที่ไม่ใช่เชิงพื้นที่) และgeomในดัชนีเดียวกัน ดูbtree_ginและbtree_gistสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำเช่นนี้

นอกจากนี้อาจมีฟังก์ชั่น 200 หรือมากกว่านั้นรองรับโดย PostGIS

ในระยะสั้น, MySQL ไม่ได้เป็นเจ้าของ PostGIS และรู้ได้ PostGIS เป็นสัตว์ร้าย แค่อยากจะอธิบายบางสิ่งนี้


0

ฉันเห็นด้วยกับข้อความทั้งหมดของคำตอบแรก แต่การแบ่งปันประสบการณ์ของฉันเอง - ฉันได้ทำสิ่งนี้ในการบริหารทางหลวงแห่งชาติของประเทศของฉัน: นักวิจารณ์การผลิตไซต์ที่มีการจราจรสูง ฉันแนะนำให้ใช้แอปพลิเคชันเว็บเป็นฟีดทั้ง MySQL และ PostgreSQL / PostGIS

สำหรับทุกสิ่ง "ทั่วไป" เว็บแอปทำงานได้อย่างไร้ที่ติด้วย CMS ที่ใช้ MySQL สำหรับงานด้านอวกาศแอปพลิเคชันเว็บเดียวกันทำงานได้อย่างไม่มีที่ติด้วย) กับ PostgreSQL / PostGIS การพัฒนาที่กำหนดเองมีเหตุผล องค์ประกอบแรกได้รับการพัฒนาและดูแลรักษาได้อย่างง่ายดายด้วยทักษะ MySQL ปกติ องค์ประกอบที่สองเกี่ยวข้องกับความพยายามค้นคว้าเพิ่มเติมอีกเล็กน้อยในตอนแรก

คุณไม่จำเป็นต้องบังคับให้มีการใช้งานสิ่งที่มีค่าใช้จ่ายทั้งหมดใน PostgreSQL / PostGIS ที่ไม่คุ้นเคยและคุณไม่จำเป็นต้องบังคับใช้การนำข้อมูลเชิงพื้นที่มาใช้ใน MySQL ให้ผู้เล่นทุกคนเล่นในจุดที่สามารถตีได้


2
โดยปกติฉันจะหลีกเลี่ยงการใช้งานฐานข้อมูลคู่ในกรณีที่ไม่จำเป็นต้องใช้อย่างแน่นอน การติดตั้งและบำรุงรักษาเอ็นจิ้นฐานข้อมูลแยกต่างหากสองตัวช่วยให้คุณทำงานระยะยาวได้มากและเพิ่มภาระการทดสอบ การเรียนรู้ความแตกต่างที่น้อยมากระหว่าง MySQL และ Postgres ในขอบเขต "ยูทิลิตี้ทั่วไป" เป็นงานที่ครั้งหนึ่งค่อนข้างน้อยและสร้างขึ้นเพื่อสถาปัตยกรรมที่สะอาดกว่าเมื่อคุณทำเสร็จแล้ว ...
voretaq7
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.