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?
Réponses:
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.
la source
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
la source
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.
la source