面向Facebook的消息的数据库设计

Ran*_*lez 17 php mysql sql database database-design

我目前正在计划PHP/MySQL中的新系统,并希望确保我的数据库可以处理我计划存储的数据量.我的新项目的一个特点是像Facebook这样的"消息"功能.我想确保为最终用户创造最佳体验.该网站最终将处理1000个用户,并可能共有数百万条消息.什么是数据库设计的最佳方法?MySQL甚至是正确使用的数据库吗?

zom*_*bat 16

只要您正确设计数据库,MySQL对数百万或数亿条记录没有任何问题.

话虽如此,"像Facebook这样的消息功能"是一个相当广泛的定义.通常,您将定义一个messages表,将每条消息链接到创建它的用户(即,userId在messages表中有一列).如果您希望将消息发送给多个用户,则可以message_recipients通过存储由messageIda和a 组成的多个记录来定义一对多关系recipientId.为这些表添加适当的索引,你就是那里的80%.

话虽这么说,剩下的20%可能是一个杀手.不幸的是,您如何使用数据库将决定您还需要做什么,在做出判断之前,您必须提供有关应用程序的更多详细信息.例如,您可能希望考虑使用自动归档解决方案来保持主表相对较小,并将旧数据移动到可以在必要时访问的备份表.您可能不会立即需要它,但它可能在将来有所帮助.

  • 根据我的经验,几乎每个人或公司在规划系统时都会夸大他们对现实的要求10倍到100倍.如有疑问,请从简单开始,购买1台服务器并从中运行Web服务器和数据库.在您需要之前不要担心多台服务器.从第1天开始拥有多台服务器的唯一原因是因为您希望进行故障转移,即便如此,您可能会发现初始成本超出了您的需求. (9认同)
  • @TravisO - 100%同意. (2认同)

Dan*_*llo 11

Facebook最初使用的是MySQL,当他们拥有超过1亿用户的7TB收件箱数据时,他们才转移到Cassandra.

资料来源:Lakshman,Malik:Cassandra - 分散式结构化存储系统.

  • 确切地说,从小做起,保持低成本.仅仅因为你想成为下一个Facebook并不意味着你需要花费任何金钱或时间来设计一个广泛的系统.每个成功的网站都开始简单,快捷,便宜.在设计您的系统时,需要"过早优化". (6认同)

HLG*_*GEM 7

如果您计划处理大量数据(当然数百万甚至没有接近合格的数据),那么聘请数据库专业人员.针对大型数据集的高效且有效的数据库设计是一个复杂的问题,需要专家.

回答你的问题是,如果设计很好,mysql可以轻松处理数百万条记录,如果设计不好,将会成为一场噩梦,就像任何其他现代数据库一样.