2011-11-07 71 views
1

我正在創建一個類似Facebook的社交網站。 對於我的「牆」,我有許多不同類型的信息,如狀態,消息,用戶喜歡/不喜歡的頁面,用戶更新了他的個人資料,...如何設計像Facebook一樣的複雜牆的數據庫

我想知道如何設計我的DB與牆相關的表格)在獲取牆上物品時儘可能高效(就速度而言)。

在此先感謝!

編輯:我有兩個想法:

  1. 有一大桌有足夠的列來處理所有的可能性(USER_A,USER_A,消息,網頁,is_like,is_dislike,...)。它會很快,但會有很多'NULL'值,並且會佔用很多DB空間
  2. 有一個只有三列(id,user_a,user_b)的'wall_item'表和每種牆項目的表消息,喜歡,狀態......)。它將被正常化,但會花費更多時間,因爲需要獲取所有信息的左連接數量。
+0

你能說我爲什麼把我的問題投下來嗎?我不知道它有什麼問題...讓我知道,我會很樂意解決它;) –

回答

2

我建議你有兩張桌子 - 一張是內容,另一張是喜歡/不喜歡的。有很多空值不是問題 - 空值不會佔用空間。可能需要單獨保持好惡,因爲他們發生了很多事情,他們並不滿足於自己。

如果您希望您的系統具有可伸縮性,請避免JOIN-s。最好連續執行2-3個查詢,而不是使用大量JOIN-s的大型查詢。此外,如果你有很多的讀取操作,而沒有太多的寫入(與數字或讀取相比),在寫入過程中做一些額外的操作是明智的。

例如,你可以有一個單獨的表格(包含用戶ID和帖子ID)。當有人發佈新帖子時,每個朋友都會將帖子ID寫入表格WALL。因此,顯示牆只是從表WALL中讀取post-id並拉取內容 - 而不是在顯示期間從所有用戶的帖子中搜索內容。

當新人成爲朋友時,只需將他們最近的帖子的ID複製到其他牆上即可。項目祝你好運!

+0

感謝您的回答;) –

0

我認爲,NOSQL是用來獲得性能的。對於這種應用程序,任何大型表數據庫訪問都會很慢,更不用說任何連接的表了。