我正在編寫一個應用程序,它具有與Google圈子/ FB好友列表類似的某些功能。我應該如何構建這個組/角色模式?
- 用戶可以把他們知道的人到一羣人(家族,同事,朋友等) (現在組不能嵌套)
- 用戶可以將消息發送到組(S),設定每組隱私設置等
- 在一個職位組內共享,這些羣體的用戶可以發表評論,並看到其他人的評論,無論他們與其他人的關係(即組內)
現在,我們正在使用關係數據庫(mysql),因爲有些限制隨着時間和資源。無論如何,我試圖找到構建我們的數據庫來平衡性能和清晰度的最佳方式。下面是我們目前有:
users:
user_id
default_group_id
friend_group_id
groups:
group_id
groups_to_users:
user_id
group_id
messages:
message_id
messages_to_groups:
message_id
group_id
galleries_to_groups:
gallery_id
group_id
首次創建一個用戶,他/她將有2個基地羣:
- 將只包含單個用戶
- 的默認組朋友組,其中將包含他/她與朋友的所有人
我們將簡單地使用group_id來確定「許可」,而不是使用user_id。這樣我們可以跳過查詢2個表格的複雜性。
與此同時,通過上述結構,我們也遇到了查詢用戶收到的所有消息的障礙,因爲如果此用戶有100個朋友,我們可能必須查詢至少100個組。所以現在我們用這個相當黑客的方法來解決這個問題:
如果用戶發送消息給一個組,然後我們瀏覽這個組中的成員列表並保存每個用戶的記錄(message_id,(default_ )GROUP_ID)。問題是,如果這個組擁有1000多個成員,那麼我們將不得不爲每個發送到這個組的新消息插入1000多條記錄,並且當這個用戶對組成員進行任何修改時,我們也必須更新大量的記錄。
我想知道是否有更好的方法來構建我們的數據庫來提高性能?
Nageswara Rao,請您詳細說明如何將數據存儲在數據庫中?我有點慢在這裏 – mr1031011
您可以通過在groups_to_users引入一些冗餘 例 users_to_groups --------------- USER_ID --->用戶ID <解決用例冗餘數據,以避免查詢用戶和組表> USER_ID --->組識別符號 messages_to_group ----------------- GROUP_ID - > MESSAGE_ID USER_ID --- > message_id 所以,如果你想讓一個組的成員通過group_id查詢groups_to_users –