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

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

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

评论

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

#1 楼

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

您可以为以下对象构建良好的PostGIS / PostgreSQL解决方案:繁重的读取负载(主/从复制)和巨大的数据量(表分区),但是写入负载很困难。您已经提出了针对Mongo和PostGIS的案例,这是PostGIS更大的功能集和代码成熟度,因此请与其他问题保持平衡。

评论


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

– Paul Ramsey
2011年5月17日17:16

是的,我知道..这真的很有趣(如果您只是想用最新的技术,就打在头上吧):)

– RameshVel
2011年5月17日17:20

好吧,您始终可以通过关闭fsync = off来“ webscale”;)

–拉吉·亚瑟(Ragi Yaser Burhum)
2011年5月18日下午5:01

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

– Paul Ramsey
13年8月8日在17:53

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

–拉维·库马尔(Ravi Kumar)
15年4月19日在15:05

#2 楼

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

在我看来,Mongo对于简单的点数据存储和检索就可以了。边界框地理空间查询似乎运行良好,并且我发现总体性能非常好。尽管我发现mongoimport工具不允许我在TSV或CSV文件中定义复合2D坐标字段,但它的设置和操作也非常容易。由于编写生成JSON的脚本非常容易,因此这并不是什么大问题。目前,它的主要缺点是地理空间领域几乎没有其他内容可以从中读取数据。 https://github.com/springmeyer/mapnik-mongo上似乎有一个实验性的Mapnik数据源插件,但这就是我所能找到的全部。 (至少对我而言),但如上所述,它提供了开箱即用的更多功能。除了提供更加复杂的空间分析功能外,它还获得了众多其他应用程序和库的本地支持。 Mapserver,Mapnik,QGis,GDAL等,对我来说,PostGIS更加是一个真正的GIS系统,而不是简单的存储和检索系统。

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

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

Roger

评论


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

– RameshVel
2011年7月28日下午6:56

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

–rkm
13年5月5日在8:43

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

–拉维·库马尔(Ravi Kumar)
15年4月19日在15:08

#3 楼

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