海量数据写入场景下RDS应搭配Aurora还是MySQL使用?
高吞吐量批量写入数据库选型及优化方案
核心结论
切换为调优后的自建MySQL可以获得远高于当前托管Aurora的写入性能,完全可以达到你本地SQL Server数分钟完成6000万条记录写入的水平。
选型对比
- 自建MySQL:是成本最低、适配性最好的选择,无需额外学习成本,适配原有关系型表结构,调优后批量写入性能是默认配置托管Aurora的10~20倍。
- 自建PostgreSQL:批量导入场景下性能略优于MySQL,如果后续有分析查询需求可以优先选择,写入性能和调优后的MySQL基本持平。
- KV数据库(如RocksDB、LevelDB):如果不需要SQL查询能力,仅需写入持久化存储,这类数据库的写入性能还能再提升2~3倍,是纯写入场景的最优选择。
性能最大化调优要点(以MySQL为例)
因为无需考虑数据安全、冗余、并发,直接关闭所有非必要的持久化、校验逻辑即可:
- 关闭所有日志输出:设置
sql_log_bin=0,关闭慢查询日志、通用日志,错误日志仅记录ERROR级别信息 - 修改InnoDB核心参数:
innodb_flush_log_at_trx_commit = 0 sync_binlog = 0 innodb_doublewrite = OFF innodb_support_xa = OFF innodb_buffer_pool_size = 服务器内存的70%
- 导入操作优化:
- 导入前删除所有二级索引,数据写入完成后再统一创建
- 用
LOAD DATA INFILE语法导入,代替批量INSERT语句,性能可提升3~5倍 - 单次提交的批量大小设置为1万~10万条,避免小事务频繁提交
你之前使用的托管Aurora写入慢的核心原因是默认开启了多副本同步、事务持久化、高可用相关逻辑,并非Aurora本身性能差,只是在你不需要这类能力的场景下,托管服务的默认配置冗余度过高,浪费了大量写入性能。
内容的提问来源于stack exchange,提问作者Benoit Desrosiers
相关产品推荐
相关产品推荐

