如何优化聊天消息在数据库中的存储
朋友们,需要优化数据库中聊天消息的保存方式MySql.Database类型并不重要。聊天工作代码在数据库表中存储消息单条消息的原则是一条线。如果用户的数量是1000-10000,并且可能更多,那么可以想象,表中有多少行。一种选择是将所有帖子放入缓存中(文件,APC,甚至原则上可以存储在Redis中),并且每隔24小时从cron以json字符串的形式将其注入主基础中。让那一天得到这一条记录。如何优化聊天消息在数据库中的存储
有必要优化方法。我认为这是真的吗?有没有可能改进这个选择,还是有更好的办法? 谢谢。
这个问题相当广泛 - 可以说是基于观点的。
但是...
你必须平衡设计中的各种顾虑。性能和可扩展性的一端,努力构建和维护,以及另一端的基础架构。在大多数情况下,努力和成本方面很重要。因此,我的建议是从一个关系模型开始,没有缓存,分片等,但是具有强大的数据库服务器,干净的关系模式以及对查询优化的大量关注。根据我的经验,这使得该应用程序能够为数万个并发用户提供足够的速度,可以存储几十或几百万行而不会影响性能,而且对于构建和维护都是最具成本效益的。硬件通常比开发者时间便宜得多。
我还建议设置一个性能和可伸缩性测试系统,具有代表性的数据和负载测试框架(如Apache JMeter)。使用这个系统来验证你的系统在负载和大量数据下的执行情况。设置性能和可伸缩性目标,例如“10K并发用户,100万条旧消息,响应时间必须为1秒<”。
在你的负载测试环境中运行定期测试,优化和调整模式,查询等,并继续这样做,直到你真的无处可去。
我的猜测是,它会带你大量的流量达到这一点。
一旦你达到那一点,缓存可能是下一步。这不是微不足道的,特别是在聊天应用程序中。你必须确保高速缓存支付自己的费用(即高速缓存命中率足够高以使它有所作为;通常,这意味着至少有10%),并且你不用花太多时间管理缓存(例如,当您发布新消息时会失效),它会造成更多的伤害而不是好的。
所以,证明你有一个真正的,可衡量的需求,然后进行优化。
谢谢,我会考虑你的话。但那不是我需要的:(而且它不是那么广泛的话题。 –
@ C0dekid这是一个非常严重的问题。因为数据库可能因为错误的方法而中断 –
“表格可以很快填充” - 一个MySQL表格可以容纳十亿七千三百七十四万一千八百二十四行。你每天会收到多少条消息,能够很快填补这些消息? – Quentin
@Quentin每次抽出这些消息需要多长时间? –