一尘不染

MySQL表有多少行“太多”?

mysql

我正在为将有用户的应用程序构建数据库方案,每个用户在诸如“收藏夹”之类的关系表中将有许多行。每个用户可能有数千个收藏夹,并且可能有数千个注册用户(随着时间的推移)。

鉴于永远不会删除用户,因为这会使其他实体变成孤立的实体,或者也将它们删除(这是不希望的),因此这些表将永远增长,我想知道结果表是否可能太大(例如:1kk行),我应该担心这一点,并进行一些操作,例如将旧的和不活跃的用户标记为已删除,并删除仅影响他们的关系(例如收藏夹和其他首选项)。

这是要走的路吗?还是MySQL可以轻松处理表中的1kk行?有已知限制吗?还是完全依赖于硬件?


阅读 333

收藏
2020-05-17

共1个答案

一尘不染

我同意klennepette和Brian的几点警告。

如果您的数据与生俱来是关系的,并且受与SQL配合使用的查询的影响,那么您应该能够扩展到数亿条记录,而无需特殊的硬件要求。

您将需要投资建立索引,查询调优,并为提高速度而偶尔牺牲关系模型。设计表时,至少应该点点性能-例如,将整数优先于字符串作为键。

但是,如果您有以文档为中心的要求,需要自由文本搜索或有很多层次关系,则可能需要再次查看。

如果您需要ACID事务,则可能会比不关心事务的时候更早遇到可伸缩性问题(尽管实际上这不太可能会影响您)。如果您有长期运行的事务或复杂的事务,则可伸缩性会迅速下降。

我建议从头开始构建项目,并考虑可伸缩性要求。我过去所做的工作是建立一个测试环境,该环境中填充了数百万条记录(我使用了DBMonster,但不确定是否仍然存在),并使用诸如负载测试工具定期针对该数据库测试在制品代码Jmeter。

2020-05-17