1

在我尝试构建的应用程序中,会有用户(存储在用户表中),并且用户可以相互“连接”(例如成为 Facebook 上的朋友)。我要做的是构建用于存储这些连接的数据结构。数据将主要用于为用户呈现“连接”(例如 Facebook 上的朋友)表。到目前为止,我遇到了两种不同的方法:

  1. 为每个用户创建一个表,其中包含他所有的连接(例如朋友)。
  2. 有一张表代表网站中的所有连接(例如:

[第 1 行 = 约翰-凯尔]

[第 2 行 = 凯尔鲍勃]

[第 3 行 = Lilli-John]

ETC....)。

我的问题是 - 哪一个会更有效(主要是在查询时间方面,但也在大小方面)。我猜第二个的大小会小得多,但会花费更多时间来查询......你觉得呢?哪个更好用?如果您知道哪种模型使用更广泛(尤其是 Facebook、Instagram 等流行网站),那也会有很大帮助!

4

2 回答 2

1

除了性能之外,不采用第一种方法有充分的理由,但即使是性能也不太可能从这种方法中获得:

  1. 在许多表中,DBMS 首先需要找到正确的表,然后才能搜索它。
  2. 只需一次索引查找即可搜索一张表。

因此,您可以搜索 table + small index seek而不是一个大索引 seek。查找表不可能比大 B-Tree 下降的“上半部分”快,而且许多单独的表可能会导致很多“松弛”(即没有完全填满的页面),从而降低缓存效率. 由于这两个原因,(2)可能更快。

于 2012-07-31T15:20:00.907 回答
0

一张包含所有连接的桌子。每行都有用户 a ,用户 b ,连接类型。其中连接类型是对另一个列出连接类型的表的引用。添加适当的索引。

于 2012-07-31T13:57:03.727 回答