Database 对于最短路径算法,图形数据库更好吗?
我的目标是为道路网络编写一个最短路径算法 目前我的架构是这样的:我将所有数据存储在支持PostGIS的PostgreSQL数据库中。我做了一个Database 对于最短路径算法,图形数据库更好吗?,database,graph,neo4j,shortest-path,graph-databases,Database,Graph,Neo4j,Shortest Path,Graph Databases,我的目标是为道路网络编写一个最短路径算法 目前我的架构是这样的:我将所有数据存储在支持PostGIS的PostgreSQL数据库中。我做了一个SELECT*FROM ways,这在一个有100000条边(ways)的表上花费不到3秒钟,然后我将对已经驻留在内存中的图应用一个(Java、Ruby或任何基于Ruby的)最短路径算法。在一个有100000条边的图形上,第二个操作可能需要大约1.5秒 因此,需要: 2-3秒,将数据库中的所有路径加载到内存中,并创建一个图形(节点存储在一个带有路径(边)
SELECT*FROM ways
,这在一个有100000条边(ways)的表上花费不到3秒钟,然后我将对已经驻留在内存中的图应用一个(Java、Ruby或任何基于Ruby的)最短路径算法。在一个有100000条边的图形上,第二个操作可能需要大约1.5秒
因此,需要:
- 2-3秒,将数据库中的所有路径加载到内存中,并创建一个图形(节点存储在一个带有路径(边)的表中)李>
- 1-1.5秒计算内存中已存在的图形上的最短路径
- 数据库由一个表(方式)组成
- 对数据库的唯一查询是将所有方法都放入内存(构建一个图形)
- 我不需要可伸缩性,即图表可能不会增长
我敢打赌,假设您将问题转换为适合于图形数据库的模型,它将为您提供更好的性能“很简单,但除非进行积极的优化,否则效果不会很好。图形数据库最初可能不会将所有数据加载到内存中,但随着时间的推移,因为好的数据库设计用于处理超大数据集。然而,一旦数据存在,图形数据库就必须做的工作比关系数据库更少,以遍历链接。这是因为它可以使用相关对象的标识直接访问相关对象,而不必使用B树索引和(可能)联接表,因此一旦缓存了节点和边,它应该会更快。如果使用任何图形数据库,如Neo4j,当然不必重新发明轮子。许多最短路径算法都是内置的,它的设计是为了处理复杂性,如果你必须考虑在任何特定的道路、单行道、道路得分等方面的速度限制。当你的数据增长10倍或100倍时,你如何跟上性能。考虑到100000种方式的总计算时间为3sec,1M种方式的计算时间为分钟,Neo4j的响应时间为毫秒。图形数据库的突破不仅在于性能,更在于概念:您的路由算法处理的是单关系图。(也就是说,graph WAR链接都是相同类型的)而GraphDatabase有一个多关系图 这使您能够计算仅使用特定类型的边或避免使用其他类型的边的节点之间的最短路径 有关更多信息,您应该阅读管道的定义和概念 我强烈建议项目从图形数据库开始