适用于高性能Web应用程序的最佳GIS系统-PostGIS与MongoDB


36

我正在基于位置数据开发Web /移动应用程序。由于我已经熟悉MongoDB,因此我发现mongo的地理空间索引非常适合我的需求。由于我主要处理的是简单/短位置点,因此Mongo 2d索引对我很有好处。

我选择PostGIS的方式是因为它的方式稳定/成熟。及其出色的功能集。但是我主要关心的是性能,因为我的数据在很大程度上取决于位置(大多数db调用中有70-80%处理位置)。

我喜欢mongo,因为它已经被Foursquare等高性能网络应用所使用。但是我已经看到PostGIS主要用于政府/企业项目(主要是非Web /移动应用程序)。因此,我现在很少为我的Web /移动应用程序选择正确的GIS数据库?有什么建议吗?


2
使用postgres / postgis创建空间索引,您将看到良好的性能。但是,如果您对MongoDB更满意,则可以继续。
Mapperz

Answers:


36

如果您的写入负载(传入的数据流)可能无限制地增长(如果您的Web项目的成功将导致写入量的增长,增长,增长),那么就选择Mongo,因为很难围绕一旦您超出了单个高端服务器的功能(必须指出,这是相当大的),就在PostGIS / PostgreSQL中编写瓶颈。

您可以为繁重的读取负载(主/从复制)和庞大的数据量(表分区)构建良好的PostGIS / PostgreSQL解决方案,但是写入负载很困难。您已经提出了针对Mongo和PostGIS的案例,后者是PostGIS的更大的功能集和代码成熟度,因此要在其他方面进行权衡。


3
哦,请记住,“ MongoDB是网络规模”。xtranormal.com/watch/6995033/mongo-db-is-web-scale
Paul Ramsey

是的,我知道。.这真的很有趣(如果您只是想使用最新技术,可以打在头上):)
RameshVel 2011年

1
好吧,您始终可以通过关闭fsync = off来“ webscale”;)
Ragi Yaser Burhum 2011年

1
PostgresXC现在可以提供具有完全事务保证和多节点查询执行的并行写入系统。皮带和吊带,OLAP和OLTP,值得一看。并且它支持PostGIS。
保罗·拉姆西

但是,如果选择PostgresXC / XL,则需要自己维护软件包。它的正式版本仅适用于Fedora / Redhat,Ubuntu爱好者必须花时间手动编译。
拉维·库马尔

21

我已经使用PostGIS几年了,直到最近才开始研究如何使用MongoDB处理某些用例。我正在处理具有稀疏字段的点数据,例如OSM数据,每条记录具有不同数量的标签,并且由于MongoDB没有架构,因此非常适合于此。我将这些数据的样本加载到每个数据库的实例中,这就是我发现的结果。

在我看来,Mongo对于简单的点数据存储和检索就可以了。边界框地理空间查询似乎运行良好,并且我发现总体性能非常好。尽管我发现mongoimport工具不允许我在TSV或CSV文件中定义复合2D坐标字段,但它的设置和操作也非常容易。由于编写生成JSON的脚本非常容易,因此这并不是什么大问题。目前,它的主要缺点是地理空间领域几乎没有其他内容可以从中读取数据。在https://github.com/springmeyer/mapnik-mongo上似乎有一个实验性的Mapnik数据源插件,但这就是我能找到的全部。

另一方面,PostGIS的建立时间要长一点(至少对我而言),但是如上所述,它提供了开箱即用的更多功能。除了提供更加复杂的空间分析功能外,它还获得了众多其他应用程序和库的本地支持。Mapserver,Mapnik,QGis,GDAL等,对我来说,PostGIS更加是一个真正的GIS系统,而不是简单的存储和检索系统。

就性能而言,我发现我可以从两个系统中快速检索数据。但是,似乎PostGIS从索引的存在中受益更多。MongoDB一次将整个数据集返回给我(200万条记录)的速度稍快,而一次返回使用索引的查询的速度稍慢。我不确定它用于缓存的机制,但是我可以看到,如果我在MongoDB中重复查询,则第二次返回的结果会更快。我在PostGIS中看到了类似的内容,但程度不同。我也确实注意到,运行MongoDB时,我的机器上的内存使用似乎比PostGIS高得多。

因此,我的结论是,我不会放弃PostGIS作为默认的地理空间存储和分析系统,但是对于某些类型的项目(即显示图像图块和/或点数据的Web地图),我可以考虑使用MongoDB作为我的数据存储。

罗杰


1
我完全同意您的看法。mongo是处理基本地理数据的很好的选择。目前,我正在做更简单的球形和边界框查询,并且做得很好。我还要添加的一件事是Solr lucene还提供了基本的geo函数作为mongo,并且在与多面查询一起使用时也非常快。currenlty正在使用mongo和Solr的组合
。– RameshVel

@RameshVel您能告诉我有关Solr Lucene的更多信息吗?
rkm

@rashad,您可以安装elasticsearch(只需下载,提取并完成),然后使用Geo DSL查询进行操作。它非常基本,但是如果您想要搜索/构面以及地理位置,则可以使用它。
拉维·库玛

3

关于Mongo的内存使用情况,值得指出的是,Mongo完全依赖于OS文件缓存将其索引和数据存储到内存中-没有“ mongo内存缓冲区/索引缓存”的概念,因此您会发现它尝试了(或操作系统将使用所有可用RAM,直到所有数据文件都已缓存为止。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.