Meilleur système SIG pour une application Web hautes performances - PostGIS vs MongoDB

36

Je travaille sur une application Web / mobile basée sur les données de localisation. Comme je connais déjà bien MongoDB, j’ai trouvé que l’indexation géospatiale de mongo était tout à fait adaptée à mes besoins. Comme je traite principalement de points de localisation simples / courts, l’indexation Mongo 2d est bonne pour moi.

En cours de route, j'ai choisi PostGIS en raison de sa stabilité et de sa maturité. Et son ensemble de fonctionnalités génial. Mais ma principale préoccupation est la performance, car mes données dépendent fortement de la localisation (la plupart du temps, 70 à 80% des appels de base de données traitent de la localisation).

J'aime mongo car il est déjà utilisé par les applications Web hautes performances telles que foursquare. Mais j'ai vu que PostGIS était principalement utilisé dans des projets gouvernementaux / d'entreprise (principalement des applications non Web / mobiles). Donc, je suis un peu confus en ce moment de choisir la bonne base de données SIG pour mon application Web / mobile? Vous avez des suggestions?

RameshVel
la source
2
créez un index spatial avec postgres / postgis et vous verrez de bonnes performances. Mais si vous êtes plus heureux avec MongoDB, continuez avec cela.
Mapperz

Réponses:

36

Si votre charge d'écriture (flux de données entrant) peut potentiellement croître sans limite (si le succès de votre projet Web entraînera une augmentation du nombre d'écritures) écrivez un goulot d'étranglement dans PostGIS / PostgreSQL une fois que vous dépassez les capacités d'un seul serveur haut de gamme (qui, notons-le, sont plutôt énormes).

Vous pouvez concevoir de bonnes solutions PostGIS / PostgreSQL pour les charges de lecture lourdes (réplication maître / esclave) et pour les très grandes tailles de données (partitionnement de table), mais la charge en écriture est difficile. Vous avez déjà exposé les arguments contre Mongo et pour PostGIS, qui est l'ensemble de fonctionnalités beaucoup plus vaste et la maturité du code de PostGIS. Par conséquent, comparez cela aux autres préoccupations.

Paul Ramsey
la source
3
Oh, et rappelez-vous, "MongoDB est une balance web". xtranormal.com/watch/6995033/mongo-db-is-web-scale
Paul Ramsey
oui je sais que .. c'était vraiment drôle (et taper dans la tête si tu voulais juste
t'imaginer
1
Eh bien, vous pouvez toujours "webscale" en désactivant fsync = off;)
Ragi Yaser Burhum
1
PostgresXC peut désormais fournir un système en écriture parallèle avec des garanties transactionnelles complètes et une exécution de requêtes multi-nœuds. Ceinture et bretelles, OLAP et OLTP, à voir. Et cela soutient PostGIS.
Paul Ramsey
Mais si vous choisissez PostgresXC / XL, vous devrez gérer vous-même le package. Officiellement uniquement disponible pour Fedora / Redhat, les amateurs d’Ubuntu doivent passer du temps à la compilation manuelle.
Ravi Kumar
21

J'utilise PostGIS depuis quelques années et ce n'est que récemment que j'ai commencé à étudier comment utiliser MongoDB pour traiter certains cas d'utilisation. Je m'occupais de données ponctuelles contenant des champs épars - telles que les données OSM avec un nombre variable d'étiquettes par enregistrement, et comme MongoDB n'a pas de schéma, il s'y prête bien. J'ai chargé un échantillon de ces données dans une instance de chaque base de données et voici ce que j'ai trouvé.

Il me semble que pour le stockage et la récupération simples de données de points, Mongo fonctionne parfaitement. Les requêtes géospatiales du cadre de sélection semblent bien fonctionner et je trouve que les performances globales sont très bonnes. Il est également très facile à installer et à démarrer, bien que j’ai constaté que l’outil mongoimport ne me permettait pas de définir un champ de coordonnées 2D composé dans un fichier TSV ou CSV. Comme il est assez facile d'écrire un script générant du JSON, cela n'a pas posé de gros problèmes. Son principal inconvénient à l'heure actuelle est que presque rien dans le domaine géospatial ne peut en lire les données de manière native. Il semble y avoir un plugin de source de données Mapnik expérimental à l' adresse https://github.com/springmeyer/mapnik-mongo , mais c'est tout ce que j'ai pu trouver.

PostGIS, d’autre part, prend un peu plus de temps à mettre en place (du moins pour moi), mais comme on l’a mentionné plus haut, il offre beaucoup plus de fonctionnalités immédiatement. En plus de fournir une capacité d'analyse spatiale beaucoup plus sophistiquée, elle est également supportée de manière native par une tonne d'autres applications et bibliothèques; Mapserver, Mapnik, QGis, GDAL, etc. Pour moi, PostGIS est beaucoup plus un véritable système SIG que un simple système de stockage et de récupération.

En ce qui concerne les performances, j’ai trouvé que je pouvais récupérer très rapidement les données des deux systèmes. Cependant, il semblait que PostGIS bénéficiait davantage de la présence d’index. MongoDB a été légèrement plus rapide en me renvoyant le jeu de données complet (2 millions d’enregistrements) à la fois et légèrement plus lentement en renvoyant une requête utilisant un index. Je ne suis pas tout à fait sûr du mécanisme qu'il utilise pour la mise en cache, mais je peux voir que si je répète une requête dans MongoDB, les résultats sont beaucoup plus rapides la seconde fois. Je vois quelque chose de similaire dans PostGIS, mais pas au même degré. J'ai également noté que l'utilisation de la mémoire sur ma machine semble être beaucoup plus élevée sous MongoDB que sous PostGIS.

Donc, ma conclusion est que je ne vais pas me débarrasser de PostGIS comme système d'analyse et de stockage géospatial par défaut, mais pour certains types de projets (notamment les cartes Web qui affichent des mosaïques d'images et / ou des données de points), je pourrais envisager d'utiliser MongoDB. comme mon magasin de données.

Roger

lagerratrobe
la source
1
Je suis tout à fait d’accord avec vous. Mongo est une très bonne option pour la gestion des données géographiques de base. Je fais actuellement des requêtes plus simples sur les boîtes sphériques et englobantes. Une dernière chose que je voudrais ajouter, c’est que Solr lucene fournit également les fonctions géographiques de base en tant que mongo, et que c’est assez rapide également lorsqu’on utilise des requêtes à facettes. Currenlty suis en utilisant la combinaison de mongo et Solr ..
RameshVel
@RameshVel pourriez-vous en dire plus sur solr lucene?
Rkm
@rashad, vous pouvez installer elasticsearch (télécharger, extraire et terminer) et jouer avec les requêtes Geo DSL. C'est assez basique, mais si vous voulez une recherche / facettes aussi bien que géo, vous pouvez l'utiliser.
Ravi Kumar
3

En ce qui concerne l'utilisation de la mémoire avec Mongo, il convient de noter que Mongo s'appuie entièrement sur le cache de fichiers du système d'exploitation pour obtenir ses index et ses données en mémoire - aucun concept de 'cache mémoire / cache mongo', vous le verrez essayer (ou le système d'exploitation utilisera plutôt) toute la mémoire RAM disponible jusqu'au moment où tous vos fichiers de données ont été mis en cache.

Patrick Vale
la source