Yüksek performanslı web uygulaması için en iyi GIS sistemi - PostGIS vs MongoDB


36

Konum verilerine göre bir web / mobil uygulama üzerinde çalışıyorum. MongoDB'ye zaten aşina olduğum için, mongo'nun coğrafi endekslemesinin benim ihtiyaçlarım için oldukça uygun olduğunu gördüm. Ağırlıklı olarak basit / kısa konum noktalarıyla uğraştığım için, Mongo 2d endekslemesi benim için iyi.

Yol boyunca PostGIS'i istikrarlı / olgun bir şekilde seçtim. Ve müthiş özellik seti. Ancak asıl kaygım, verilerim büyük ölçüde yere bağlı olduğu için performanstır (db çağrılarının% 70-80'i bu konumla ilgilidir).

Mongo'yu severim çünkü zaten foursquare gibi yüksek performanslı web uygulamaları tarafından kullanılıyor. Ancak PostGIS'in çoğunlukla devlet / işletme projelerinde (çoğunlukla web / mobil uygulamalar) kullanılmadığını gördüm. Bu yüzden şu anda web / mobil uygulamam için doğru GIS db'yi seçmek konusunda kafam karıştı? Bir önerin var mı?


2
postgres / postgis ile mekansal indeks yaratırsanız iyi performans görürsünüz. Ama MongoDB ile daha mutluysanız, o zaman buna devam edin.
Mapperz

Yanıtlar:


36

Yazma yükünüz (gelen veri akışı) potansiyel olarak sınırsız olarak büyüyebilirse (web projenizin başarısı, yazılan miktarın artmasına neden olacaksa), Mongo ile devam edin; Tek bir high-end sunucunun yeteneklerinin ötesine geçtikten sonra PostGIS / PostgreSQL'de darboğaz yazınız (ki bu oldukça dikkat çekicidir).

Ağır okuma yükü (master / slave replikasyon) ve büyük veri boyutları (tablo bölümleme) için iyi PostGIS / PostgreSQL çözümleri tasarlayabilirsiniz, ancak yazma yükü zordur. Çok daha büyük bir özellik olan ve PostGIS'in kod olgunluğunu belirleyen Mongo ve PostGIS aleyhindeki davayı zaten ortaya koydunuz, bu nedenle diğer kaygılara karşı dengelendi.


3
Oh, ve hatırlayın, "MongoDB web ölçeğidir". xtranormal.com/watch/6995033/mongo-db-is-web-scale
Paul Ramsey

evet biliyorum ki ... gerçekten komikti (ve sadece en yeni teknolojiye sahip olmak istiyorsan kafanın tam
ortasına çarptı

1
Eh, her zaman fsync = off; "webscale" olabilir;)
Ragi Yaser Burhum

1
PostgresXC artık tam işlem garantileri ve çok düğümlü sorgu yürütme özelliğine sahip yazma paralel bir sistem sağlayabilir. Kemer ve jartiyer, OLAP ve OLTP, bakmaya değer. Ve PostGIS'i destekliyor.
Paul Ramsey

Ancak PostgresXC / XL'yi seçerseniz, paketi kendiniz korumanız gerekecektir. Resmen sadece Fedora / Redhat için geçerli olan Ubuntu severler, işleri elle derlemek için zaman harcıyorlar.
Ravi Kumar

21

PostGIS'i birkaç yıldır kullanıyorum ve yakın zamanda MongoDB'yi belirli kullanım durumlarıyla başa çıkmak için nasıl kullanabileceğimi araştırmaya başladım. Çok az alan içeren nokta verileriyle uğraşıyordum - kayıt başına değişen sayıda etikete sahip OSM verileri gibi, ve MongoDB'nin şeması olmadığından, bu konuda kendisini iyi borç veriyor. Bu verilerin bir örneğini her DB örneğine yükledim ve bu da buldum.

Bana göre, nokta verilerinin basit bir şekilde depolanması ve toplanması için Mongo gayet iyi çalışıyor. Sınırlayıcı kutu coğrafi sorguları iyi çalışıyor gibi görünüyor ve genel performansın çok iyi olduğunu düşünüyorum. Ayrıca mongoimport aracının bir TSV veya CSV dosyasında bir bileşik 2D koordinat alanı tanımlamama izin vermediğini tespit etmeme rağmen, kurulumu ve kullanımı çok kolaydır. JSON üreten bir senaryo yazmak oldukça kolay olduğundan, bu pek sorun olmamıştır. Şu andaki en büyük dezavantajı, mekansal alemdeki hemen hemen hiçbir şeyin doğal olarak ondan veri okuyamamasıdır. Https://github.com/springmeyer/mapnik-mongo adresinde deneysel bir Mapnik veri kaynağı eklentisi var gibi görünüyor , ancak tüm bulabildiğim bu.

PostGIS'in ayarlanması biraz daha uzun sürüyor (en azından benim için), ancak yukarıda belirtildiği gibi kutudan çıkar çıkmaz şekilde daha fazla özellik sunuyor. Çok daha karmaşık mekansal analitik yetenek sağlamanın yanı sıra, tonlarca başka uygulama ve kütüphaneler tarafından da doğal olarak desteklenir; Mapserver, Mapnik, QGis, GDAL vs.

Performansa gelince, her iki sistemden de çok hızlı bir şekilde veri alabileceğimi öğrendim. Ancak, PostGIS endekslerin varlığından daha fazla yararlanmış gibi görünüyordu. MongoDB, ayarlanan tüm verileri bana (2 milyon kayıt) bir kerede geri döndürmede biraz daha hızlı ve ilk kez bir dizin kullanan bir sorgu döndürürken biraz daha yavaştı. Önbellekleme için kullandığı mekanizmadan tam olarak emin değilim, ancak MongoDB'de bir sorguyu tekrarlarsam sonuçların 2. kez daha hızlı bir şekilde geri döndüğünü görebiliyorum. PostGIS'te benzer bir şey görüyorum ama aynı derecede değil. Ayrıca, makinemdeki bellek kullanımının MongoDB çalışıyorken PostGIS'e kıyasla çok daha yüksek göründüğünü de gördüm.

Bu yüzden benim sonucum, PostGIS'i varsayılan jeo-uzamsal depolama ve analiz sistemim olarak kurtaramayacağım, ancak belirli proje türleri için (yani görüntü döşemeleri ve / veya nokta verilerini gösteren web haritaları) MongoDB kullanmayı düşünebilirim. veri depom olarak.

Roger


1
kesinlikle sana katılıyorum .. mongo, temel Geo verilerini kullanmak için çok iyi bir seçenek. şu anda daha basit küresel ve sınırlayıcı kutu sorgulamaları yapıyorum ve bunun iyi bir yanı var. Eklemek istediğim bir şey daha Solr lucene'nin temel sorgu işlevlerini mongo olarak sağlaması ve çok yönlü sorgularla kullanıldığında da oldukça hızlı olması. para hem mongo hem de Solr kombinasyonunu kullanıyorum.
RameshVel

@RameshVel, solr lucene hakkında daha fazla bir şey söyleyebilir misiniz?
rkm

@rashad, elasticsearch'ü yükleyebilir (yalnızca indirme, çıkartma ve bitirme) ve Geo DSL sorguları ile oynayabilirsiniz. Oldukça basit, ama coğrafi olarak arama / facets istiyorsanız, kullanabilirsiniz.
Ravi Kumar

3

Mongo ile yapılan bellek kullanımıyla ilgili olarak, Mongo'nun endekslerini ve verilerini belleğe almak için tamamen OS dosya önbelleğine dayandığına dikkat etmek önemlidir - bir 'mongo bellek tamponu / indeks önbelleği' kavramı yoktur, bu yüzden denemeyi (veya daha ziyade, işletim sistemi) tüm mevcut RAM'leri tüm veri dosyalarınızın önbelleğe alındığı noktaya kadar kullanacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.