有必要优化方法。我认为这是真的吗?是否可以改进此选项,还是有更好的选择? 谢谢。
答案 0 :(得分:2)
这个问题相当广泛 - 可以说是基于意见的。
...然而
您必须平衡此设计中的各种问题。一端的性能和可扩展性,构建和维护的努力以及另一端的基础架构。在大多数情况下,努力和成本方面很重要。
所以,我的建议是从关系模型开始,没有缓存,分片等,但是具有强大的数据库服务器,干净的关系模式,以及对查询优化的大量关注。根据我的经验,这使得该应用程序足够快,可以容纳成千上万的并发用户,可以存储数万或数亿行而不会对性能产生影响,并且对于构建和维护来说是最具成本效益的。硬件通常比开发人员时间便宜得多。
我还建议设置性能和可伸缩性测试系统,包括代表性数据和负载测试框架(类似Apache JMeter)。使用此系统可以验证系统在负载下的执行情况以及大量数据。设置性能和可伸缩性目标,例如“10K并发用户,100万条旧消息,响应时间必须<1秒”。
在您的负载测试环境中运行常规测试,优化和调整架构,查询等,并继续这样做,直到您真的无处可去。
我的猜测是,它会带来大量的流量来达到这一点。
一旦达到这一点,缓存可能是下一步。这非常重要,特别是在聊天应用程序中。你必须确保缓存为自己付出代价(即缓存命中率足以让它产生差异;通常,这意味着至少10%),并且你不会花太多时间来管理缓存(例如,当您发布新邮件时无效),它弊大于利。
因此,证明你有一个真实的,可衡量的需求,然后进行优化。