我需要能够快速找到给定目的地的 n 个最近的目的地,计算 n 个目的地的 n x n 距离矩阵以及与两个或多个目的地之间的距离相关的其他几个此类操作。

我了解到与 MySQL 数据库相比,Graph DB 将提供更好的性能。我的应用程序是用 PHP 编写的。

所以我的问题是 - 是否可以将 Graph DB 与 PHP 应用程序一起使用,如果是,那么哪个是最佳选择和开源以及如何将此数据存储在图形 DB 中以及如何访问它。

提前致谢。

最佳答案

Neo4j 是一个非常可靠的图形数据库,并且还具有灵活的(如果有点复杂)许可。它实现了 Blueprints API,并且应该很容易从几乎任何语言(包括 PHP)使用。它也有一个 REST API,它非常灵活,并且至少有 one good example 从 PHP 中使用它。

根据您拥有的数据,有多种存储方式。

如果您有“路线”数据,其中您的点已经通过特定路径相互连接(即,您不能从一个点直接跳转到另一个点),那么您只需将每个点设为一个节点以及您之间的连接 route 的点是节点之间的边,距离是这些边的属性。这会给你一个看起来像你经典的“旅行推销员”类问题的图表,计算节点之间的距离只是一个加权广度优先搜索的问题(假设你想要最短路径)。

如果你可以用你的数据集从一个地方跳到另一个地方,那么你就有了一个 fully connected 图。显然,这是大量数据,并且随着您添加更多目的地而呈二次增长,但图形数据库可能比关系数据库更擅长处理这个问题。为了存储距离,当您向图中添加节点时,您还向每个现有节点添加一条边,并将距离预先计算为它的属性之一。然后,要检索一对节点之间的距离,您只需找到它们之间的边并获得它的距离属性。

但是,如果您有大量完全连接的节点,您最好只存储这些节点的坐标并根据需要计算距离,并可选择缓存结果以加快速度。

最后,如果您使用 Blueprints API 和该堆栈中的其他工具,例如 GremlinRexter ,您应该能够换入/换出任何兼容的图形数据库,这让您可以使用可能更好地满足您需求的不同实现,就像在 Titan/Cassandra 集群之上使用 Hadoop 一样。

关于php - 使用 Graph DB 使用 PHP 存储位置之间的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12466725/

10-11 02:59
查看更多