我的目标是为道路网络编写最短路径算法。
目前我的架构是这样的:我将所有数据存储在启用 PostGIS 的 PostgreSQL 数据库中。我做了一个SELECT * FROM ways
,在具有 100,000 条边(路)的表上花费不到 3 秒的时间,之后我将对已经驻留在内存中的图应用(Java、Ruby 或任何基于)最短路径算法。在具有 100,000 条边的图上,第二个操作可能需要大约 1.5 秒。
所以,它需要:
- 2-3秒将数据库中的所有路径加载到内存中并创建一个图(节点存储在一个带有路径(边)的表中);
- 1-1.5 秒计算已在内存中的图上的最短路径。
这与 pgRouting 所做的非常相似(据我所知,它使用 C Boost 将图形存储在内存中),除了 pgRouting 总共需要大约 2 秒来计算同一数据集上的最短路径(是的,它很快,但是它对我来说是一个黑匣子,所以我需要自己的)。
但最近我发现了有关 Graph 数据库和 Neo4j 的信息。在他们的网站上,他们声称“仍然能够在数百万条道路和航路点的图表上以亚秒级的速度进行这些计算,这使得在许多情况下可以放弃使用 K/V 存储预计算索引的正常方法,并能够将路由置于关键路径,以适应生活条件,构建高度个性化和动态的空间服务。”
所以问题是:对于我的特定问题,图形数据库会更快吗?
该问题具有以下性质:
- 数据库由一张表(方式)组成;
- 对数据库的唯一查询是将所有方式都放入内存(以构建图形);
- 我不需要可扩展性,即图形很可能不会增长。