ระบบ GIS ที่ดีที่สุดสำหรับเว็บแอปพลิเคชันประสิทธิภาพสูง - PostGIS vs MongoDB


36

ฉันกำลังทำงานกับแอปพลิเคชั่นเว็บ / มือถือโดยอ้างอิงจากข้อมูลตำแหน่ง เนื่องจากฉันคุ้นเคยกับ MongoDB แล้วฉันพบว่าการจัดทำดัชนีเชิงพื้นที่ของ Mongo ค่อนข้างเหมาะสำหรับความต้องการของฉัน เนื่องจากฉันจัดการกับจุดสถานที่ตั้งแบบง่าย / สั้นการทำดัชนี Mongo 2d เป็นสิ่งที่ดีสำหรับฉัน

ตามวิธีที่ฉันเลือก PostGIS เนื่องจากมีความเสถียร / เป็นผู้ใหญ่ พร้อมฟีเจอร์ที่ยอดเยี่ยม แต่ข้อกังวลหลักของฉันคือประสิทธิภาพเนื่องจากข้อมูลของฉันขึ้นอยู่กับสถานที่ตั้งเป็นอย่างมาก (ส่วนใหญ่ 70 - 80% ของการเรียก db จัดการกับตำแหน่ง)

ฉันชอบ Mongo เพราะใช้งานโดยเว็บแอปประสิทธิภาพสูงเช่น foursquare แล้ว แต่ฉันได้เห็นว่า PostGIS ส่วนใหญ่ใช้ในโครงการของรัฐบาล / องค์กร (ส่วนใหญ่ไม่ใช่แอปพลิเคชันเว็บ / มือถือ) ดังนั้นตอนนี้ฉันจึงสับสนเล็กน้อยในการเลือก GIS db ที่เหมาะสมสำหรับแอปพลิเคชันเว็บ / มือถือของฉัน มีข้อเสนอแนะใด ๆ ?


2
สร้างดัชนีเชิงพื้นที่ด้วย postgres / postgis และคุณจะเห็นประสิทธิภาพที่ดี แต่ถ้าคุณมีความสุขกับ MongoDB ให้ทำต่อไป
Mapperz

คำตอบ:


36

หากภาระการเขียนของคุณ (สตรีมข้อมูลขาเข้า) สามารถเติบโตได้โดยไม่ จำกัด (หากความสำเร็จของโครงการเว็บของคุณจะทำให้ปริมาณการเขียนเพิ่มขึ้น) จากนั้นไปกับ Mongo เพราะจะยากที่จะออกแบบเส้นทางของคุณ เขียนคอขวดใน PostGIS / PostgreSQL เมื่อคุณเติบโตเกินขีดความสามารถของเซิร์ฟเวอร์ระดับไฮเอนด์ตัวเดียว (ซึ่งมันก็ค่อนข้างจะถูกบันทึกไว้

คุณสามารถออกแบบโซลูชัน PostGIS / PostgreSQL ที่ดีสำหรับการอ่านข้อมูลจำนวนมาก (การจำลองแบบหลัก / ทาส) และสำหรับขนาดข้อมูลขนาดใหญ่ (การแบ่งตาราง) แต่การเขียนข้อมูลเป็นเรื่องยาก คุณได้ทำคดีกับ Mongo และสำหรับ PostGIS ซึ่งเป็นชุดคุณลักษณะที่ใหญ่กว่าและรหัสครบกำหนดของ PostGIS ดังนั้นให้ปรับสมดุลกับข้อกังวลอื่น ๆ


3
โอ้และจำไว้ว่า "MongoDB เป็นขนาดเว็บ" xtranormal.com/watch/6995033/mongo-db-is-web-scale
Paul Ramsey

ใช่ฉันรู้ว่า .. มันเป็นเรื่องตลกจริงๆ (และกดขวาที่หัวถ้าคุณเพียงแค่ต้องการที่จะจินตนาการตัวเองด้วยเทคโนโลยีใหม่ล่าสุด) :)
RameshVel

1
คุณสามารถ "webscale" ได้ตลอดเวลาโดยปิด fsync = off;)
Ragi Yaser Burhum

1
PostgresXC สามารถจัดหาระบบการเขียนแบบขนานพร้อมการรับประกันธุรกรรมแบบเต็มและการดำเนินการค้นหาหลายโหนด Belt and suspenders OLAP และ OLTP น่าดู และรองรับ PostGIS
Paul Ramsey

แต่ถ้าคุณเลือก PostgresXC / XL คุณจะต้องบำรุงรักษาแพ็คเกจด้วยตนเอง อย่างเป็นทางการสำหรับ Fedora / Redhat เท่านั้นผู้ที่ชื่นชอบ Ubuntu ต้องใช้เวลาในการรวบรวมสิ่งต่าง ๆ ด้วยตนเอง
Ravi Kumar

21

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

สำหรับฉันแล้วดูเหมือนว่าสำหรับการจัดเก็บและเรียกคืนข้อมูลจุด Mongo ใช้งานได้ดี ข้อความค้นหาเชิงพื้นที่ขอบเขตกล่องดูเหมือนจะทำงานได้ดีและฉันพบว่าประสิทธิภาพโดยรวมดีมาก นอกจากนี้ยังง่ายต่อการติดตั้งและไปต่อแม้ว่าฉันจะพบว่าเครื่องมือ mongoimport ไม่อนุญาตให้ฉันกำหนดเขตผสม coord 2D ในไฟล์ TSV หรือ CSV เนื่องจากการเขียนสคริปต์ที่สร้าง JSON นั้นค่อนข้างง่ายจึงไม่เป็นปัญหามากนัก ข้อเสียเปรียบที่สำคัญในขณะนี้คือแทบจะไม่มีสิ่งใดในอาณาจักรเชิงพื้นที่ที่สามารถอ่านข้อมูลจากมันได้ ดูเหมือนจะมีปลั๊กอินแหล่งข้อมูล Mapnik ทดลองที่https://github.com/springmeyer/mapnik-mongoแต่นั่นคือทั้งหมดที่ฉันสามารถหาได้

ในทางกลับกัน PostGIS ใช้เวลาในการตั้งค่านานกว่าเล็กน้อย (อย่างน้อยสำหรับฉัน) แต่ดังที่ได้กล่าวไว้ข้างต้นมันมีคุณสมบัติเพิ่มเติมมากมายในทันที นอกเหนือจากการให้ความสามารถในการวิเคราะห์เชิงพื้นที่ที่ซับซ้อนยิ่งขึ้นแล้วยังได้รับการสนับสนุนโดยแอปพลิเคชันและห้องสมุดอื่น ๆ อีกมากมาย Mapserver, Mapnik, QGis, GDAL และอื่น ๆ สำหรับฉัน PostGIS นั้นเป็นระบบ GIS ที่แท้จริงมากกว่าที่จะเป็นระบบจัดเก็บและค้นคืนที่ง่ายกว่า

เท่าที่ประสิทธิภาพดำเนินไปฉันก็พบว่าฉันสามารถดึงข้อมูลได้อย่างรวดเร็วจากทั้งสองระบบ อย่างไรก็ตามดูเหมือนว่า PostGIS จะได้ประโยชน์มากขึ้นจากการมีดัชนี MongoDB นั้นเร็วกว่าเล็กน้อยเมื่อส่งคืนชุดข้อมูลทั้งหมดให้ฉัน (2 ล้านบันทึก) ในคราวเดียวและช้าลงเล็กน้อยเมื่อส่งคืนแบบสอบถามที่ใช้ดัชนีซึ่งเป็นครั้งแรก ฉันไม่แน่ใจเกี่ยวกับกลไกที่ใช้ในการแคช แต่ฉันเห็นได้ว่าถ้าฉันทำแบบสอบถามซ้ำใน MongoDB ผลลัพธ์จะกลับมาเร็วขึ้นเป็นครั้งที่ 2 ฉันเห็นสิ่งที่คล้ายกันใน PostGIS แต่ไม่ใช่ในระดับเดียวกัน ฉันยังทราบด้วยว่าการใช้หน่วยความจำบนเครื่องของฉันดูเหมือนจะสูงขึ้นเมื่อ MongoDB ทำงานมากกว่า PostGIS

ดังนั้นข้อสรุปของฉันคือฉันจะไม่กำจัด PostGIS เป็นระบบจัดเก็บข้อมูลเชิงพื้นที่และการวิเคราะห์ค่าเริ่มต้นของฉัน แต่สำหรับโครงการบางประเภท (เช่นแผนที่เว็บที่แสดงแผ่นภาพและ / หรือจุดข้อมูล) ฉันอาจพิจารณาใช้ MongoDB เป็นที่เก็บข้อมูลของฉัน

โรเจอร์


1
ฉันเห็นด้วยอย่างยิ่งกับคุณ .. mongo เป็นตัวเลือกที่ดีมากในการจัดการข้อมูลภูมิศาสตร์พื้นฐาน ขณะนี้ฉันกำลังทำแบบสอบถามทรงกลมและขอบเขตกล่องง่ายขึ้นและทำได้ดี .. อีกสิ่งหนึ่งที่ฉันต้องการเพิ่มคือ Solr lucene ยังให้ฟังก์ชันทางภูมิศาสตร์พื้นฐานเป็น Mongo และมันค่อนข้างเร็วเกินไปเมื่อใช้กับแบบสอบถามแบบเหลี่ยม currenlty กำลังใช้การรวมกันของทั้งสอง mongo & Solr ..
RameshVel

@RameshVel คุณสามารถบอกอะไรเพิ่มเติมเกี่ยวกับ solr lucene ได้ไหม?
rkm

@rashad คุณสามารถติดตั้ง elasticsearch (เพียงดาวน์โหลดแยกและทำ) และเล่นกับข้อความค้นหา Geo DSL มันค่อนข้างพื้นฐาน แต่ถ้าคุณต้องการค้นหา / แง่มุมเช่นเดียวกับภูมิศาสตร์คุณสามารถใช้มัน
Ravi Kumar

3

เกี่ยวกับการใช้หน่วยความจำกับ Mongo มันคุ้มค่าที่ชี้ให้เห็นว่า Mongo นั้นอาศัยแคชไฟล์ของ OS เพื่อรับดัชนีและข้อมูลลงในหน่วยความจำ - ไม่มีแนวคิดของ 'mongo memory buffer / index cache' ดังนั้นคุณจะเห็นว่าลอง (หรือ แต่ระบบปฏิบัติการจะใช้) RAM ที่มีอยู่ทั้งหมดจนถึงจุดที่ไฟล์ข้อมูลทั้งหมดของคุณถูกแคช

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.