Sistem GIS terbaik untuk aplikasi web berkinerja tinggi - PostGIS vs MongoDB

36

Saya bekerja pada aplikasi web / seluler berdasarkan data lokasi. Karena saya sudah terbiasa dengan MongoDB, saya menemukan pengindeksan geospatial dari mongo cukup cocok untuk kebutuhan saya. Karena saya terutama berurusan dengan poin lokasi sederhana / pendek, pengindeksan Mongo 2d baik untuk saya.

Sepanjang jalan saya memilih PostGIS, karena cara stabil / dewasa. Dan set fiturnya yang mengagumkan. Tetapi perhatian utama saya adalah kinerja karena data saya sangat tergantung pada lokasi (kebanyakan 70 - 80% dari panggilan db berurusan dengan lokasi).

Saya suka mongo karena sudah digunakan oleh aplikasi web berkinerja tinggi seperti foursquare. Tetapi saya telah melihat PostGIS terutama digunakan dalam proyek-proyek pemerintah / perusahaan (kebanyakan non-web / aplikasi seluler). Jadi saya sedikit bingung sekarang untuk memilih dm GIS yang tepat untuk aplikasi web / seluler saya? Punya saran?

RameshVel
sumber
2
buat indeks spasial dengan postgres / postgis dan Anda akan melihat kinerja yang baik. Tetapi jika Anda lebih bahagia dengan MongoDB maka lanjutkan dengan itu.
Mapperz

Jawaban:

36

Jika beban tulis Anda (aliran data yang masuk) berpotensi tumbuh tanpa batas (jika keberhasilan proyek web Anda akan menyebabkan jumlah penulisan tumbuh tumbuh bertambah) maka pergilah dengan Mongo, karena akan sangat sulit untuk merancang jalan Anda di sekitar tulis bottleneck di PostGIS / PostgreSQL begitu Anda tumbuh melampaui kemampuan server high-end tunggal (yang, perlu dicatat, cukup besar sekali).

Anda dapat merancang solusi PostGIS / PostgreSQL yang bagus untuk beban baca berat (replikasi master / slave) dan untuk ukuran data yang besar (partisi tabel) tetapi beban penulisan sulit. Anda telah mengemukakan kasus terhadap Mongo dan untuk PostGIS, yang merupakan kumpulan fitur dan kode kematangan PostGIS yang jauh lebih besar, jadi seimbangkan hal itu dengan kekhawatiran lainnya.

Paul Ramsey
sumber
3
Oh, dan ingat, "MongoDB adalah skala web". xtranormal.com/watch/6995033/mongo-db-is-web-scale
Paul Ramsey
ya saya tahu itu .. itu benar-benar lucu (dan tekan tepat di kepala jika Anda hanya ingin
membayangkan
1
Ya, Anda selalu bisa "webscale" dengan mematikan fsync = off;)
Ragi Yaser Burhum
1
PostgresXC sekarang dapat menyediakan sistem paralel-tulis dengan jaminan transaksional penuh dan eksekusi permintaan multi-node. Belt dan suspender, OLAP dan OLTP, layak untuk dilihat. Dan itu mendukung PostGIS.
Paul Ramsey
Tetapi jika Anda memilih PostgresXC / XL, Anda harus mengurus sendiri paketnya. Secara resmi hanya tersedia untuk Fedora / Redhat, pecinta Ubuntu harus menghabiskan waktu menyusun hal-hal secara manual.
Ravi Kumar
21

Saya telah menggunakan PostGIS selama beberapa tahun dan baru-baru ini mulai menyelidiki bagaimana saya bisa menggunakan MongoDB untuk menangani kasus penggunaan tertentu. Saya berurusan dengan data titik yang memiliki bidang jarang - seperti data OSM dengan berbagai jumlah tag per catatan, dan karena MongoDB tidak memiliki skema, itu cocok untuk hal ini. Saya memuat sampel data ini ke dalam instance dari setiap DB dan inilah yang saya temukan.

Tampak bagi saya bahwa untuk penyimpanan sederhana dan pengambilan data titik, Mongo bekerja dengan baik. Kueri geospasial kotak pembatas tampaknya bekerja dengan baik, dan saya menemukan bahwa kinerja keseluruhan sangat baik. Ini juga sangat mudah untuk setup dan memulai, meskipun saya telah menemukan bahwa alat mongoimport tidak memungkinkan saya untuk mendefinisikan bidang gabungan kata majemuk 2D dalam file TSV atau CSV. Karena cukup mudah untuk menulis skrip yang menghasilkan JSON, ini tidak terlalu menjadi masalah. Kelemahan utamanya saat ini adalah hampir tidak ada hal lain di ranah geospasial yang dapat secara asli membaca data darinya. Tampaknya ada plugin sumber data Mapnik eksperimental di https://github.com/springmeyer/mapnik-mongo , tapi hanya itu yang bisa saya temukan.

PostGIS di sisi lain membutuhkan waktu sedikit lebih lama untuk mengatur (setidaknya untuk saya), tetapi seperti yang disebutkan di atas, ia menyediakan lebih banyak fitur jauh dari kotak. Selain menyediakan kemampuan analitik spasial yang jauh lebih canggih, ia juga didukung secara alami oleh banyak aplikasi dan perpustakaan lainnya; Mapserver, Mapnik, QGis, GDAL, dll. Bagi saya, PostGIS lebih merupakan sistem GIS yang sebenarnya, daripada sistem penyimpanan dan pengambilan sederhana.

Sejauh kinerja berjalan, saya menemukan bahwa saya dapat mengambil data dengan sangat cepat dari kedua sistem. Namun, sepertinya PostGIS lebih diuntungkan dari keberadaan indeks. MongoDB sedikit lebih cepat mengembalikan seluruh set data kepada saya (2 juta catatan) sekaligus, dan sedikit lebih lambat mengembalikan kueri yang menggunakan indeks - pertama kali. Saya tidak begitu yakin tentang mekanisme yang digunakan untuk caching, tapi saya bisa melihat bahwa jika saya mengulangi pertanyaan dalam MongoDB, hasilnya kembali jauh lebih cepat pada kali ke-2. Saya melihat sesuatu yang serupa di PostGIS, tetapi tidak pada tingkat yang sama. Saya juga mencatat bahwa penggunaan memori pada komputer saya tampaknya jauh lebih tinggi dengan MongoDB berjalan daripada PostGIS.

Jadi, kesimpulan saya adalah bahwa saya tidak akan menyingkirkan PostGIS sebagai sistem penyimpanan dan analisis geospasial standar saya, tetapi untuk jenis proyek tertentu (yaitu peta web yang menampilkan petak gambar dan / atau data titik) saya dapat mempertimbangkan menggunakan MongoDB sebagai penyimpan data saya.

Roger

lagerratrobe
sumber
1
saya sangat setuju dengan Anda .. mongo adalah pilihan yang sangat baik untuk menangani data Geo dasar. Saat ini saya sedang melakukan kueri kotak bola dan pembatas yang lebih sederhana, dan itu bekerja dengan baik .. Satu hal lagi yang ingin saya tambahkan adalah Solr lucene juga menyediakan fungsi geo dasar sebagai mongo, dan itu juga cukup cepat saat menggunakan dengan kueri faceted. currenlty am menggunakan kombinasi keduanya mongo & Solr ..
RameshVel
@RameshVel dapatkah Anda memberi tahu lebih banyak tentang soluc lucene?
rkm
@rashad, Anda dapat menginstal elasticsearch (cukup unduh, ekstrak, dan selesai), dan mainkan dengan permintaan Geo DSL. Ini cukup mendasar, tetapi jika Anda ingin mencari / segi serta geo, Anda dapat menggunakannya.
Ravi Kumar
3

Mengenai penggunaan memori dengan Mongo ada baiknya menunjukkan bahwa Mongo bergantung sepenuhnya pada cache file OS untuk mendapatkan indeks dan data ke dalam memori - tidak ada konsep 'buffer memori mongo / cache indeks', sehingga Anda akan melihatnya mencoba (atau melainkan, OS akan menggunakan) semua RAM yang tersedia sampai pada titik di mana semua file data Anda telah di-cache.

Patrick Vale
sumber