并发多线程批量数据插入/更新到Mysql

时间:2014-12-22 14:03:40

标签: java mysql multithreading parallel-processing mybatis

我的多线程(大约10个线程)应用程序的多个实例正在不同的机器上运行(大约10台机器)。因此,此应用程序的总共100个线程同时处于活动状 这些线程中的每一个都产生4个输出集,每个集包含1k-5k行。这些集合中的每一个都被推送到单个Mysql机器,相同的db,相同的表(插入或更新操作)。因此每个线程产生4个表消耗4个表。 我使用mybatis作为ORM。在将输出写入DB时,这些线程可能会花费大量时间来处理请求。 在这种情况下,如何优化数据库写入? 1.使用mybatis的批处理 2.将数据写入文件,这些文件将由单个消费者线程&写入DB? 3.将每个数据集写入不同的文件和使用4个消费者线程从同一个集合中选择必须推送到同一个表的数据,从而最大限度地减少锁定? 如果可能,请建议其他更好的方法?

1 个答案:

答案 0 :(得分:1)

数据库用于处理并发。不确定mybatis究竟是什么带入了图片(一般来说不是ORM的忠实粉丝),但是如果它正在使用它,这会让你开始考虑像中间文件和单线程更新这样的黑客,你可能会更好地剥离使用普通的jdbc写入db并写入数据库,处理您的用例应该没有问题,只要您充分批量处理更新。