2013-08-27 98 views
1

嗨,我正在使用Netty和MySQL製作服務器。聊天服務器的MySQL表優化

我的服務器的主要任務是記錄用戶的信息和聊天。

我對數據庫非常陌生,而且我一直在爲聊天編寫模式。

我需要記錄從客戶端發送的每個聊天的聊天室號碼,發件人ID,接收者ID,內容和時間戳。 我認爲每個聊天室都會發送約50條聊天內容。每天至少創建100個聊天室。

我想爲每個創建的聊天室製作一張桌子。但是,這將使每月約3000張桌子。 如果我將所有聊天室記錄在一張表中,表格將會很長。我猜測從該表中檢索記錄將花費大量資源。

這部分是我卡住的地方。錄製聊天時的正常做法是什麼?

+1

對於一個數據庫來說,每月3000張表格確實不算太多。爲了你自己的緣故,你可以有一個計劃的工作,它可以隨時刪除舊數據。 – Magnilex

回答

2

對於每個聊天室,在消息,用戶和房間之間使用外鍵關係時,應該可以使用數據庫行。

擁有rooms表:

id, name, created 

一個users表:

id, username, password, created 

一個messages表:

id, room_id, user_id, message, time 

然後用一些非常簡單連接,以便檢索數據你要。例如,在聊天室中檢索最新信息:

SELECT u.username, m.message, m.time FROM messages 
LEFT JOIN rooms r ON m.room_id = r.id 
LEFT JOIN users u ON m.user_id = u.id 
WHERE r.name = 'chatroomName' 
AND m.time > lastPolledTime 

與上次檢查的消息,以刪除重複的時間更換lastPolledTime