有几个关于消息传递系统的讨论,但主要与电子邮件结构有关。如何成为规范化数据库中成员消息传递的最有效方式?
我正在考虑创建一个包含五列的消息表:
ID (PRIMARY KEY)
First_Person (FK user_id)
Second_Person (FK user_id)
Message
date
我担心的是阅读这张大桌子。
查找某人的所有消息(例如user_id 876)
SELECT * FROM messages WHERE First_Person='876' OR Second_Person='876'
和两个人之间的沟通
SELECT * FROM messages WHERE (First_Person='876' OR Second_Person='876')
AND (First_Person='1500' OR Second_Person='1500') ORDER DESC BY date
由于这种消息传递就像聊天,对于成千上万的成员来说,这个表可以增长到数十亿行(而不是数百万)。那么,在这么大的表中搜索消息是否有效呢?
答案 0 :(得分:0)
你是对的,这么大的桌子不可用。如果您需要一个真实的消息保持系统更好地查看NoSQL解决方案(如HBase,Cassandra,MongoDB等),您将不得不忘记关于关系数据库的任何知识。
使用MySQL,如果将表拆分成非常小的部分,你仍然可以做一些可扩展的事情。使一个表保留最多1k用户的消息(除非两个用户来自同一个表,否则您需要两次写入所有消息)。另外,在一个数据库中保留不超过1k的表,当达到此限制时自动创建另一个表。拥有多个数据库(甚至在一台物理服务器上)可以使DBA在当前服务器过载时轻松将每个数据库传输到新服务器。要获取某个用户的消息,您的代码必须从您将拥有的地图中获取所需的数据库/表。