我有一张包含 15 万行的表 (mysql)。白天有多次更新 (1000 次),将一个 int 值更改为另一个 int 值 (更新表设置字段 = ? 其中 table.id = ?)。UPDATE 查询中没有什么复杂的。
迁移到 Mongo db 之类的东西会更快吗?数据库的读取(选择)次数比写入次数多 100 次(1000 次?)。我有什么选择?
答案1
- 看看如何针对机器调优 MySQL。开箱即用的 MySQL 使用非常保守的内存数字,因此它可以在任何地方运行,每次投入生产之前都需要进行调优
- 使用 EXPLAIN 等分析工具查看查询命中了多少个索引。如果你可以减少需要修改的索引数量,这将提高更新性能
- 有一些方法可以重建或优化索引本身
可以考虑移动数据库,但首先要了解问题所在,然后着手解决容易解决的问题。有比您的数据库大得多的 MySQL 数据库可以顺利运行,这并不意味着您已经达到了技术本身的极限。与大多数性能问题一样 - 虽然这并不总是最好的解决方案,但通常可以通过调整或添加缓存来解决。
答案2
你没有提供太多背景信息,所以很难给出答案,但我相信,结合一些想法,应该能给你一个答案
您可以查看许多更新优化。其中,您的表是否在 table.id 上正确索引,以及您是否分配了足够的内存来高效地执行您要尝试的操作?您是否使用了“准备好的”语句?数据库优化是一个庞大的课题。
Mongo db 不是关系数据库,因此重写代码以使用 Mongo 是否有意义,或者是否可以通过重构部分代码更轻松地实现这一点(也许将 150k 行存储为内存数组并简单地修改此数组,定期将其备份到磁盘?????)
答案3
假设您已经优化了查询并正确建立了索引。
你可以:
- 投入额外的硬件来减少时间
- 尝试缩短更新调用者和数据库之间的连接距离(假设它们不在同一个盒子上)
- 如果事先知道变化的值,则优先缓存(如果可能)