對於我的大學項目,我正在開發一個包含房間,用戶註冊等的動態即時聊天網站。我已經將整個系統計劃在一個方面。房間。我很困惑如何設計房間數據庫。與房間實時聊天項目的數據庫模式
從透視角度看,房間是由當時是該房間的操作員的用戶創建的。用戶可以加入房間並在其中進行交談。該系統必須具有可擴展性,如果不是每天發送數百萬條消息,則該系統必須佔據數十萬個。
本來,我打算在我的數據庫名爲messages
創建表,並且有場這樣的:
| r_id | u_id | message | timestamp |
r_id
和u_id
將外鍵分別房間ID和用戶ID。這樣做意味着我需要在用戶發送消息時插入一條新記錄,並定期爲每個客戶端運行一條SELECT語句(比如說每隔3秒左右)獲取最近的消息。我擔心這是因爲表格會很大,運行這些語句可能會產生很多開銷並需要很長時間。
我想實現這個的另一種方式是爲每個房間創建一個新的數據庫表。假設一個用戶創建3個房間叫General
,Programming
和Gaming
,數據庫表會是什麼樣子:room_general
,room_programming
,room_gaming
,每個像場:
| u_id | message | timestamp |
這將大幅上查詢量減少對於每個表格,但是當我編程時可能會引入問題。
所以,我堅持要做到這一點的最佳方式是。如果它有所作爲,我使用的技術將是使用PHP的MySQL,以及完整的AJAX。
感謝您的幫助!
完美答案,memcached和表上的索引似乎是最好的方法:) 謝謝。 – 2011-12-29 21:21:58