哪一個更好a或b: a)。每個用戶7張桌子,例如user7消息,user7mail等。在這種情況下,如果我們有1000個用戶,則會有7000個表。 b)。 7個表,例如消息,郵件等,每個usr的所有messasges或郵件將在同一張桌子上。 在這種情況下,對於1000個用戶,我們只有7個表。針對大量用戶的數據庫設計
回答
在大多數情況下,在現代硬件和合理的調整,你的數據庫應該是隻要你的數據真的是關係型的,就能支持數千萬條記錄而不會有太多的痛苦。如果您正在搜索文本,存儲分層數據,存儲文檔或運行報告,則還有其他選項(例如NoSQL)。
儘可能地堅持使用關係數據庫的正統方法;這意味着normalization,query tuning,使用緩存和拋硬件的問題。
只有當你已經證明了你有一個性能問題是值得看的更奇特的解決方案。在RDBMS世界中,這可能意味着數據(類似於「每個用戶的表」想法)。或者,您可以跳轉到NoSQL。
您的「每用戶表」策略的問題在於,在通過索引查詢時(在現代RDBMS上搜索帶有1行或帶有百萬行的表時搜索索引幾乎不會產生任何好處用於查找數據的差異)。對於不打索引操作,您應該看到一個像樣的增益 - 但是這通常是你沒有真正在第一地點關係的標誌......
它使得開發客戶端應用程序,而容易出錯,並且比它需要更復雜,特別是在創建適度複雜的SQL查詢(例如多表連接)時 - 因此調整這些查詢將變得更加困難。您將無法使用可用於管理數據庫查詢的工具(例如ORM工具),因爲它們都基於「標準」關係模型。
的最大問題是改變數據庫 - 如果你要新增屬性的「消息」,你不得不重複這種變化在7000個表。你要麼花費大量時間編寫自定義的數據庫管理腳本,要麼讓人類重複同樣的事情幾千次(並且做出難以察覺的錯誤)。
情況B會好很多,只要確保你的用戶有自動遞增USER_ID類型字段,並且表在一起,通過這個ID例如鏈接
user_id email
1000 hello
這將提高查找速度,因爲你不必iclude功能選擇從搜索表中1000年的數據的特定部分(在這種情況下,它會搜索表中的列,直到它找到了正確的這將是可笑的)
但如果你正在尋找一個特定的表(例如,你只需要消息)只有1個表將被包括在查詢中,更快,更容易管理所有的表在管理員級別。
而且,甚至更好的想法是1代表數列,說「通信」表,也能像
user_id email messages
1000 hello hi
- 1. 針對數據量非常大的數據庫設計
- 2. 針對大量數據優化數據庫表格設計
- 3. 針對多個用戶站點的數據庫設計
- 4. Java針對大量數據的數據庫查詢/更新
- 5. 針對測驗應用程序的數據庫設計
- 6. 針對網絡應用程序的數據庫設計
- 7. 針對Facebook的數據庫設計訊息,如應用程序
- 8. 針對複雜測驗應用程序的數據庫設計?
- 9. 針對Web應用程序收集的數據庫設計
- 10. 針對每張紙的學生分數的數據庫設計
- 11. 計算大量的數據庫用戶數據統計信息:優化性能
- 12. 大量異構數據的數據庫存儲設計
- 13. 用戶訂閱的數據庫設計
- 14. 用戶媒體的數據庫設計
- 15. 用於存儲大量列的最佳數據庫設計?
- 16. 針對不同客戶的同一網站的數據庫設計
- 17. 針對給定數據庫模型管理大量數據庫表的技巧
- 18. 針對與人匹配的網站的數據庫設計
- 19. 針對大量小型MySQL數據庫的雲服務?
- 20. Django中針對組織特徵的樹數據庫設計
- 21. 針對Web內部交換平臺的SQL數據庫設計
- 22. 針對事件流的簡單數據庫設計
- 23. 針對博客農場的數據庫設計建議
- 24. 針對此給定場景的數據庫設計
- 25. 針對微服務架構的數據庫設計
- 26. 針對可配置產品eshop的數據庫設計建議
- 27. 針對多種相似類型的數據庫設計?
- 28. 針對Python/Django的數據庫本地化(多語言)設計
- 29. 針對投資組合網站的數據庫設計建議
- 30. 針對帖子的數據庫設計meta
謝謝seanyt123 你能解釋一個管理系統的數據庫結構,擁有超過50000個用戶嗎? – as1992 2014-11-06 12:25:47
那麼它完全取決於你想要存儲什麼不同的數據。 – seanyt123 2014-11-06 12:51:02