使用图数据库和PHP存储位置之间的距离

4
我需要能够快速找到给定目的地的n个最近目的地,为n个目的地计算n x n距离矩阵以及其他涉及两个或多个目的地之间距离的操作。
我了解到与MySQL数据库相比,图形数据库将提供更好的性能。我的应用程序是用PHP编写的。
所以我的问题是 - 是否可以在PHP应用程序中使用图形数据库?如果可以,那么哪个是最佳选择和开源的?如何在图形数据库中存储这些数据以及如何访问它们?
谢谢。

需要放弃使用MySQL。 - AJ.
我的意思是我将不得不将应用程序从目前使用的MySQL迁移到PostgreSQL。 - AJ.
3个回答

4

Neo4j 是一个非常稳定的图形数据库,具有灵活(虽然有点复杂)的许可证。它实现了 Blueprints API,并且应该很容易从任何语言(包括 PHP)中使用。它还有一个REST API,这是最灵活的API之一,并且至少有一个很好的例子可以用PHP来使用。

根据您拥有的数据,有多种存储方式可供选择。

如果您有“路线”数据,其中您的点已通过特定路径相互连接(即您不能直接从一个点跳到另一个点),那么您只需将每个点作为节点,并且在您的路线中点之间的连接是节点之间的边缘,距离作为这些边缘的属性。这将给您一个看起来像经典的“旅行推销员”问题的图形,计算节点之间的距离只是做加权广度优先搜索的问题(假设您想要最短路径)。
如果您的数据集可以跳跃地从一个地方到另一个地方,那么您就有了一个完全连接图。显然,这是很多数据,并且随着您添加更多目的地而呈二次增长,但是图形数据库可能比关系型数据库更好地处理此类问题。要存储距离,当您向图形中添加节点时,您还会向每个其他现有节点添加一个边缘,并将距离预先计算为其属性之一。然后,要检索节点对之间的距离,只需找到它们之间的边缘并获取其距离属性即可。
然而,如果你有大量的全连接节点,最好只存储这些节点的坐标,并根据需要计算距离,可以选择缓存结果以加快速度。
最后,如果你使用Blueprints API和该堆栈中的其他工具,如GremlinRexter,你应该能够交换任何兼容的图形数据库,这使你可以尝试不同的实现,以更好地满足你的需求,例如在Cassandra/Hadoop集群上使用Titan

1

1

实际上,这与数据库关系不大,而与索引有关。我使用了MongoDB的地理空间索引和搜索(文档数据库),它具有用于查找给定坐标的多个最近元素的地理索引 - 并且效果很好。尽管如此 - 它仅运行简单查询(查找最近的)并且如果您的索引不适合RAM,则会变得有点慢(我使用带有坐标的geonames DB的8mln位置,并在VM上每个查询获得0.005-2.5秒 - 1. hdd开销2. 可能索引不适合RAM)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接