对于我的大学项目,我正在开发一个包含房间,用户注册等的动态即时聊天网站。我已经将整个系统计划在一个方面。房间。我很困惑如何设计房间数据库。与房间实时聊天项目的数据库模式
从透视角度看,房间是由当时是该房间的操作员的用户创建的。用户可以加入房间并在其中进行交谈。该系统必须具有可扩展性,如果不是每天发送数百万条消息,则该系统必须占据数十万个。
本来,我打算在我的数据库名为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