2012-07-31 93 views
1

在我嘗試構建的應用程序中,將存在用戶(存儲在用戶表中),並且用戶可以「互相連接」(例如,像在Facebook上成爲朋友) 。我想要做的是構建存儲這些連接的數據結構。這些數據將主要用於呈現用戶的「連接」(例如Facebook上的朋友)表格。到目前爲止,我已經遇到了兩種不同的方法:用於表示用戶之間連接的數據庫結構

  1. 爲每個擁有所有連接(例如朋友)的用戶創建一個表。
  2. 具有表示ALL在網站(連接例如一個表:

[第1行=約翰 - 凱爾]

[行2 =凱爾,鮑勃]

[第3行= Lilli-John]

etc ....)。

我的問題是 - 哪一個會更有效率(主要是查詢時間,而且大小方面)。我想第二個人的體型會小得多,但需要更多的時間來查詢......你怎麼看?哪一個更好用?如果你有任何想法,哪種模式更廣泛使用(尤其是像Facebook,Instagram等流行網站),這也會有很大幫助!

回答

1

有外面的表現很好的理由不與第一種方法去,但即使業績不太可能從這種方法獲得:

  1. 了許多表,數據庫管理系統首先需要找到合適的表,只有這樣它才能搜索它。
  2. 只能在一個索引查找中搜索一個表。

所以,你有一個搜索表+小索引查找只是一個大的索引查找。搜索表格不可能比大型B-Tree的「上半部分」下降得更快,並且許多單獨的表格可能會導致很多「鬆弛」(即未完全填充的頁面),從而降低緩存效率。由於這兩個原因,(2)可能會更快。

0

帶有所有連接的一張表。每行有用戶a,用戶b,連接類型。其中連接類型是對另一個列出連接類型的表的引用。添加適當的索引。

+0

不需要很多時間來查詢,但通過? – byteSlayer 2012-07-31 14:28:26

+0

如果您正確編制索引,請不要。每個用戶有一張桌子是不乾淨的。 cthulhulike。 – 2012-07-31 14:30:46