如何优化数据库中聊天消息的存储

时间:2016-07-24 13:36:09

标签: mysql optimization logic chat

朋友们,有必要优化保存数据库中的聊天消息MySql.Database类型并不重要。聊天工作代码将消息保存在数据库表中,单条消息的原则就是一行。如果是用户将是1000 -10 000甚至更多,这是预期的,然后想象表格中的行数。一个选项是将所有帖子带入缓存(文件,APC,甚至原则上,可以存储在Redis中),以及每隔24小时,从cron一次以json string的形式涌入主基地。所以有一天这一记录。

有必要优化方法。我认为这是真的吗?是否可以改进此选项,还是有更好的选择? 谢谢。

1 个答案:

答案 0 :(得分:2)

这个问题相当广泛 - 可以说是基于意见的。

...然而

您必须平衡此设计中的各种问题。一端的性能和可扩展性,构建和维护的努力以及另一端的基础架构。在大多数情况下,努力和成本方面很重要。

所以,我的建议是从关系模型开始,没有缓存,分片等,但是具有强大的数据库服务器,干净的关系模式,以及对查询优化的大量关注。根据我的经验,这使得该应用程序足够快,可以容纳成千上万的并发用户,可以存储数万或数亿行而不会对性能产生影响,并且对于构建和维护来说是最具成本效益的。硬件通常比开发人员时间便宜得多。

我还建议设置性能和可伸缩性测试系统,包括代表性数据和负载测试框架(类似Apache JMeter)。使用此系统可以验证系统在负载下的执行情况以及大量数据。设置性能和可伸缩性目标,例如“10K并发用户,100万条旧消息,响应时间必须<1秒”。

在您的负载测试环境中运行常规测试,优化和调整架构,查询等,并继续这样做,直到您真的无处可去。

我的猜测是,它会带来大量的流量来达到这一点。

一旦达到这一点,缓存可能是下一步。这非常重要,特别是在聊天应用程序中。你必须确保缓存为自己付出代价(即缓存命中率足以让它产生差异;通常,这意味着至少10%),并且你不会花太多时间来管理缓存(例如,当您发布新邮件时无效),它弊大于利。

因此,证明你有一个真实的,可衡量的需求,然后进行优化。