你们有没有使用 NoSQL(非关系)数据库存储空间数据的经验?使用此类数据库为桌面应用程序(与使用 SpatiaLite 或 PostGIS 相比)保存数据是否有任何潜在优势(速度、空间......)?
我看过关于将 MongoDB 用于空间数据的帖子,但我对一些性能比较感兴趣。
你们有没有使用 NoSQL(非关系)数据库存储空间数据的经验?使用此类数据库为桌面应用程序(与使用 SpatiaLite 或 PostGIS 相比)保存数据是否有任何潜在优势(速度、空间......)?
我看过关于将 MongoDB 用于空间数据的帖子,但我对一些性能比较感兴趣。
Neo4j等图形数据库非常适合,尤其是当您可以随时动态添加不同的索引方案时。您可以对基础数据执行的典型操作当然是 1D 索引(例如 Timline 或 B-Trees)或更有趣的内容,例如 Hilbert Curves 等,请参阅Nick 的博客。此外,对于一些现场演示,请查看此处的 AWE 开源 GIS 桌面工具,底层索引图在 07:00 左右可见。
目前,MongoDB 使用 B-trees 的 geohashing,这将比 PostGIS 的 R-trees 慢(恐怕我不能给出确切的数字,但有很多关于差异的理论文献)。但是,在这些幻灯片中,http://www.slideshare.net/nknize/rtree-spatial-indexing-with-mongodb-mongodc作者谈到将 R-trees 添加到 MongoDB 并在 geo key 上进行分片。您谈论的是桌面使用,因此地理分片可能不感兴趣,因为分片的好处将更多地体现在海量数据集上。最终,它可能更多地取决于您想对空间数据做什么。Postgis 具有更多功能并支持拓扑、栅格、3D、坐标系之间的转换,所以如果这是您正在寻找的,PostGIS 仍然是最佳选择。如果您对存储数十亿/万亿个空间对象感兴趣,并且只是根据某些标准运行基本查找该点附近/内部的所有点,那么 MongoDB 可能是一个非常好的选择。
Couchdb 也有一个简单的空间扩展
我一直在用 ZODB 存储空间数据。与 TCP 或 HTTP 请求(CouchDB 等)相比,访问本地文件数据(spatialite)或 unix 套接字(PostGIS)当然有一些固有的性能优势,但拥有空间索引是最大的区别。我正在使用 MongoDB 文章中提到的相同 R-trees,但有很多不错的选择。JTS 拓扑套件具有用于 Java 的各种空间索引。
Tarantool 支持具有最近邻搜索、重叠、包含和其他空间运算符的空间二维索引 (RTREE)。Tarantool 在 RAM 中维护整个数据集,使其成为唯一支持空间索引的 OSS 内存数据库。 https://github.com/tarantool/tarantool/wiki/R-tree-index-quick-start-and-usage
Cassandra 也是空间数据的一个选项:
http://www.readwriteweb.com/cloud/2011/02/video-simplegeo-cassandra.php
MarkLogic(Enterprise NoSQL) 提供空间功能。此 NoSQL 产品为 GIS 应用程序提供了将多个对象合并为一个实体的能力。这为管理单个实体中结构化和非结构化内容、有关数据的出处和谱系信息、历史和时间线信息等之间的关系提供了支持。