本篇文章为你整理了使用多线程及线程池批量拷贝数据到MongoDB(多线程实现数据批量迁移)的详细内容,包含有多线程拷贝文件 多线程实现数据批量迁移 多线程导入数据 多线程 批量 插数据 到数据库 使用多线程及线程池批量拷贝数据到MongoDB,希望能帮助你了解 使用多线程及线程池批量拷贝数据到MongoDB。
@
目录前言一、原来代码二、改进后代码1.使用new Thread方式2.使用Runnable接口3.使用线程池
提示:本文仅供学习交流,请勿用于非法活动!
本文大概内容:
例如:随着MongoDB的广泛应用,电商用到MongoDB也越来越多。本文主要是在将购物车模块切换到MongoDB框架前,如何快速将Mysql中购物车大批量订单拷贝到MongoDB数据库中?
一、原来代码
如下,我们将拷贝100万条数据到MongoDB中。
public void copyCartToMongo() {
List Cart carts = cartMapper.selectAll();
if(carts.size() 0 ){
cartMongoService.saveCartList(carts);
二、改进后代码
public void copyCartToMongoByThread() {
// 1.我们先将批量查询及拷贝的数据分批
EntityWrapper Cart wrapper = SQLHelper.buildEmptyWrapper(Cart.class);
long count = cartMapper.selectCount(SQLHelper.build(Cart.class).geEntityWrapper());
int preCount = 100;
int operateCount = 0;
int num = operateCount = (int)count / preCount;
if(count % preCount == 0){
operateCount = num;
}else {
operateCount = num + 1;
for(int i=0;i operateCount;i++){
logger.info("保存或更新第"+(i+1)*preCount+"条数据");
Page Cart page = new Page (i,preCount);
List Cart cartList = cartMapper.selectPage(page, wrapper);
// 2.通过多线程、线程池(其他替换即可)
this.copyCartToMongoThread(cartList);
上述代码中有以下三种方式实现:
1.使用new Thread方式
代码如下:
public void copyCartToMongoThread(List Cart cartList){
final CountDownLatch latch = new CountDownLatch(cartList.size());
try{
for(Cart cart:cartList){
Thread thread = new Thread(() - {
cartMongoService.saveCart(cart);
latch.countDown();
thread.start();
latch.await();
} catch (Exception e) {
e.printStackTrace();
2.使用Runnable接口
代码如下:
public void copyCartToMongoThread(List Cart cartList){
final CountDownLatch latch = new CountDownLatch(cartList.size());
try {
for (Cart cart:cartList){
new Thread(new Runnable() {
@Override
public void run() {
cartMongoService.saveCart(cart);
latch.countDown();
}).start();
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
3.使用线程池
代码如下:
public void copyCartToMongoThreadPool(List Cart cartList){
final CountDownLatch latch = new CountDownLatch(cartList.size());
// 配置线程池个数
ExecutorService executorService = Executors.newFixedThreadPool(1);
try{
for(Cart cart:cartList){
executorService.submit(new Runnable() {
@Override
public void run() {
try{
cartMongoService.saveCart(cart);
// 一直阻塞当前线程,直到计数器值为0,保证并发
latch.await();
} catch (Exception e) {
e.printStackTrace();
latch.countDown();
} catch (Exception e) {
e.printStackTrace();
随心所往,看见未来。Follow your heart,see night!
欢迎点赞、关注、留言,一起学习、交流!
以上就是使用多线程及线程池批量拷贝数据到MongoDB(多线程实现数据批量迁移)的详细内容,想要了解更多 使用多线程及线程池批量拷贝数据到MongoDB的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。