首先,我不是一个非常有经验的开发人员,我正在用PHP、MySQL和Javascript制作中型应用程序。
但是,有些东西使我很难在每个项目之前设计一个MySQL InnoDB数据库。这就是的性能。我一直很担心,如果我要创建一个规范化的数据库方案,当我必须将几个表(比如5-6)连接在一起(它们之间通常有几个多对多、多对一的关系)时,当这5到6个表中的每个表都有大约100k行时,它会对性能产生很大的影响(负值)。
我通常拥有的这些项目是创建分析平台。因此,我预计总共会有大约100米的点击量,我通常必须将这个表加入到其他许多表中(每个表大约有100 K行)才能显示一些数据。我通常是制作点击的汇总表,但不能对其他表做同样的操作。
我不太确定在这个阶段我是否需要担心未来的表现。目前,我正在使用30M+单击来积极管理其中的几个应用程序,并使用40k+行连接到这个单击表的表中。性能相当差-一个选择操作通常需要超过10-20完成,而我相信我有适当的索引,innodb_buffer_pool_size也。
我读过很多关于优化数据库的关键是设计。这就是为什么在创建DB方案之前,我经常会考虑它的原因。
我真的需要担心创建DB方案吗?在这种情况下,我必须加入5-6、多到多/多对一/一对多的表,还是很常见的,MySQL应该能够轻松地处理这个负载?
在创建DB方案之前,还有什么需要考虑的吗?
我通常的服务器设置是有一个带有4GBRAM+2个vCPU的MySQL服务器,以服务于DB,还有一个带有4GBRAM+2个vCPU的WebServer。他们都在使用Ubuntu的16.04版本,并使用最新的MySQL (5.7.21)和PHP7-fpm。
发布于 2018-01-17 12:07:59
戈登是对的。RDBMS是用来处理您的工作负载的。
如果您使用虚拟机(云等)来托管您的东西,通常只需花费更多的钱就可以增加内存、vCPU计数和IO容量。但是,通常,在DBMS性能问题上投入资金不如向它们抛出更好的索引那么有帮助。
在1亿行的规模上,查询性能是一个合理的考虑。随着项目的发展,您将需要重新访问DBMS索引,以优化实际使用的查询。所以计划好了。问题是,在获得大量数据之前,您不能也不会知道实际的性能问题是什么。
阅读这篇文章,预览即将到来的内容:https://use-the-index-luke.com/。
一条建议:表的分区通常不会解决性能问题,除非是在非常特殊的情况下。
查一下这个缩写: YAGNI。
去做你的项目。花你现在的精力让它起作用。
https://stackoverflow.com/questions/48300496
复制相似问题