缩放mysql插入的方法

Posted

技术标签:

【中文标题】缩放mysql插入的方法【英文标题】:methods of scaling mysql inserts 【发布时间】:2013-10-30 20:03:41 【问题描述】:

我有一个 php-cli 脚本,它可以在亚马逊上进行 +200 万个 mysql 查询(使用索引的 1/2 选择语句、一对 varchar(25)、int(5) 列的 1/2 行插入)服务器的 crontab。脚本本身需要几个小时才能运行。我想把它缩短到 5 分钟左右。

我想知道如何扩大行插入以缩短时间?(该脚本本质上是一些 api 数据的 foreach 循环,因此我也在研究每次迭代分叉脚本的方法((如一个单独的问题))

我一直在研究 mysql 集群,但对数据仓库等一无所知。有人知道这是否是开始寻找的正确地方吗?像 Hive/Hadoop 这样的东西会更合适吗?

--编辑 我正在使用 ec2 微实例作为上下文。我预计将需要迁移到更重负载的实例,但我想知道是否有任何类似 mysql 的替代品来替代普通的旧 mysql 守护进程可能会有所帮助

【问题讨论】:

增加 CPU、RAM 并获得 SSD? :) 缩放插入并不容易,而且您没有提供足够的信息。插入在很大程度上取决于您的硬盘驱动器可以提供的 IOPS(每秒输入输出操作数)。如果您可以在一个事务中包装数十个插入(并且如果您使用 InnoDB 或 TokuDB 之类的事务引擎),您可能会在硬盘驱动器的单个 IO 中推送数十个(或数百个)插入。如果没有看到您的代码 - 很难进一步建议您。不过,拥有 SSD 肯定会有所帮助。 【参考方案1】:

只需从微型实例升级,您就会看到性能的巨大飞跃。微型实例使用可突增的 CPU 配置文件,在大部分导入过程中,您将以非常低的性能运行。

您可以做很多事情来优化插入。在单个事务中尽可能多地提交(InnoDB 表)或禁用索引更新(MyISAM 表)可以“分组”以更高效的方式协同工作。

在更新大量数据的某个时候,您将达到 I/O 的限制。使用 EC2,您可能想要测试 RAID 配置或预置 I/O,以了解如何最好地提高性能。

【讨论】:

以上是关于缩放mysql插入的方法的主要内容,如果未能解决你的问题,请参考以下文章

mysql防止重复插入记录方法总结

网页中插入地图的方法

MySQL 插入中文不乱码的5种方法

MySQL避免插入重复记录的方法

MySql避免重复插入记录的几种方法

MySQL 大数据量快速插入方法和语句优化