小编Vik*_*Vsk的帖子

使用 Postgresql 高效地(递归地)查找朋友的朋友

目标:用户提交他们的通讯录,然后应用程序根据他们的电话号码查找用户之间的联系。类似于“6次握手”的想法(https://en.wikipedia.org/wiki/Six_degrees_of_separation)。

问题:使这个查询性能接近实时。当用户提交他的电话号码并获得其他电话的完整列表时,他可能知道。普通列表 - 没有连接(图形顶点等),但完整,没有分页(这里要求是因为原始目标更复杂)。

问题:是否有可能使用纯关系数据库实现接近实时的性能,而无需图形数据库(Neo4j 等)、图形扩展(bitnine agensgraph)或工作流重新设计?任何非规范化都是可能的,但据我所知,它无济于事。

鉴于:

test=# select * from connections;
 user_phone | friend_phone
------------+--------------
          1 |            2
          1 |            3
          1 |            4
          2 |            6
          2 |            7
          2 |            8
          8 |           10
          8 |           11
          8 |           12
         20 |           30
         40 |           50
         60 |           70
Run Code Online (Sandbox Code Playgroud)

我希望使用电话 === 1 的用户收到以下连接:

 friend_phone
--------------
            2
            3
            4
            6
            7
            8
           10
           11
           12
(9 rows)
Run Code Online (Sandbox Code Playgroud)

估计真实世界的连接数真的很困难。但我至少在测试:

  • 10,000 个用户(电话号码)
  • 每个用户被随机分配了 50-1000 个与其他用户的伪随机 …

postgresql hierarchy graph

9
推荐指数
1
解决办法
192
查看次数

标签 统计

graph ×1

hierarchy ×1

postgresql ×1