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?
Jawaban:
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.
sumber
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
sumber
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.
sumber