sql - 在 LinkedIn 中设计一个功能,计算您和另一个人之间有多少跳?

标签 sql database-design graph

这在 quora 中受到质疑,我对最有效的答案非常感兴趣。 我认为一种方法是 sql 数据库或基于文档的数据库

get all your connections, then all your connection's connections, and then theirs, and check if the person you are looking at is somewhere in that list.

考虑到每人平均 500 个连接,以及按 user_id 数据库索引,这将是最多 3 个数据库查询。

我对图形数据库解决方案很感兴趣,对此我了解甚少,希望可以大大改进此功能。

最佳答案

在图数据库中,这样的任务是典型的路径查找任务。它是使用系统内置的算法来解决的。例如在 Neo4j 中:http://neo4j.com/docs/stable/rest-api-graph-algos.html

当您找到人与人之间的最短路径时,您可以轻松计算他们之间的边数(就您的问题而言的跳数)。

与关系数据库或键值数据库相比,图数据库在此类任务中具有很大的优势,因为它们可以使用有效的图算法,例如 Dijkstra 算法。

关于sql - 在 LinkedIn 中设计一个功能,计算您和另一个人之间有多少跳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25929242/

相关文章:

php - 将所选内容保存在变量中,然后使用该变量进行下一次选择

php - 为 symfony 中使用的表构建一个带有连接的 mysql 查询

python - 将 Pandas 操作转换为 SQL 查询

mysql - 什么时候可以不使用 PRIMARY KEY?

database - 将 JSON-LD 插入 Neo4j 的语义正确方法是什么?

excel - 如何创建包含多个系列的图表,每个系列使用不同的 X 值?

sql - 将 Null 视为 Max

mysql - 我应该为 0 到 3 之间的值使用什么数据类型

swift - 使用未声明的类型 'CPTMutableAxisLabelSet'

silverlight - 自动图形布局 Spring 理论