Mysql 用于向多个用户发送消息的数据库架构

Mysql 用于向多个用户发送消息的数据库架构,mysql,database,facebook,schema,messages,Mysql,Database,Facebook,Schema,Messages,我正在寻找最好的解决方案来实现系统内多个用户的消息传递(Facebook风格) 我想到了以下想法:每条消息都属于消息链,在消息状态表中列出了用户发送者和用户接收者。但是,当系统中有数百万条消息时,恐怕这个模式的使用效率不是很高 有人能为当前的问题提出其他解决方案吗?或者解释为什么我的解决方案会很好 CREATE TABLE `message` ( `msg_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT , `msg_text` TEXT NOT

我正在寻找最好的解决方案来实现系统内多个用户的消息传递(Facebook风格)


我想到了以下想法:每条消息都属于消息链,在消息状态表中列出了用户发送者和用户接收者。但是,当系统中有数百万条消息时,恐怕这个模式的使用效率不是很高

有人能为当前的问题提出其他解决方案吗?或者解释为什么我的解决方案会很好

CREATE  TABLE `message` (
  `msg_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `msg_text` TEXT NOT NULL ,
  `msg_date` DATETIME NOT NULL ,
  PRIMARY KEY (`msg_id`) );

CREATE  TABLE `message_chain` (
  `msgc_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `msgc_topic` VARCHAR(255) NULL ,
  PRIMARY KEY (`msgc_id`) );

CREATE  TABLE `message_status` (
  `msgsta_msg_id` BIGINT UNSIGNED NOT NULL ,
  `msgsta_usr_id` INT UNSIGNED NOT NULL ,
  `msgsta_msgc_id` INT UNSIGNED NOT NULL ,
  `msgsta_is_sender` TINYINT(1)  NULL ,
  `msgsta_is_read` TINYINT(1)  NULL DEFAULT NULL ,
  `msgsta_is_deleted` TINYINT(1)  NULL ,
  PRIMARY KEY (`msgsta_msg_id`, `msgsta_usr_id`);

只要同一消息的收件人不太多,该模式就可以正常工作。我不知道你怎么能使它变得更小或更有效


我能看到的唯一性能问题是,如果您想进行广播,也就是说,将相同的消息发送给一个大的组,或者说,发送给系统上的每个用户。发送这样的信息将非常缓慢(在那里,做了那件事)。在这种情况下,我将惰性地跟踪此类全局消息的状态,也就是说,仅在单个用户打开消息后才为其创建状态行。但是,如果您没有计划这样的功能,我会说现在就忽略这个问题。

我的解决方案是通过使用更多的编程来确定哪些消息发送给谁,从而避免大量的数据存储

例如,如果要向系统的所有用户发送消息,请在usr_id列中放置一个“”,然后通过编程方式获取usr_id=当前usr_id或“”的所有消息。然后,您可以进行各种筛选,并提出自己的语法来创建无需数据库存储的messager_用户列表


似乎是处理/存储之间的折衷…

“但是,当系统中有数百万条消息时,恐怕此模式的使用效率不高。”。。我认为在过分担心某些细节之前,你应该先达到这个极限,过早的优化是万恶之源:)不同意:)成熟的计划=没有未来的头痛这并不能真正回答问题。如果您有不同的问题,可以单击以提问。你也可以提醒更多人注意这个问题@伊瓦尔德曼的“问题”是:有人能为当前的问题提出任何其他解决方案吗?