mysql换到mongodb主键问题_记一次从mongodb到mysql的数据迁移

需要对mongodb进行分页查询,但是分页查询效率很慢,mongdb中存在主键增长,故取出最大id,定义pageSize,当前传入的id如果加上pageSize小于最大值时,userId+=pageSize,简单代码如下

IntegerpageSize =200;

final LongmaxId =17202814L;

log.info("插入开始时间为{}", LocalDateTime.now());

boolean flag =true;

int pageNo =0;

while (flag) {

try {

if (userId >maxId) {

flag =false;

}

long startTime = System.currentTimeMillis();

//log.info("当前pageNo为{}", pageNo);

//int start = pageNo * pageSize;

Query query =new Query(Criteria.where("_id").gt(userId).lte(userId +pageSize));

userId +=pageSize;

//查出分页用户

List xpUsers =mongoTemplate.find(query, XpUser.class);

long endTime = System.currentTimeMillis();

log.info("从mongodb中查出数据时间{}", (endTime - startTime));

/*if (xpUsers.size() != 0) {*/

if(xpUsers.size()==0){

continue;

}

transferData(xpUsers, pageSize * (pageNo +1));

pageNo++;

startTime = System.currentTimeMillis();

log.info("封装插入mysql数据总时间{}", (startTime - endTime));

if (maxId - userId

//最后一条数据

pageSize = Math.toIntExact(maxId - userId);

if(pageSize <=0){

flag =false;

}

}

}catch (Exception e) {

flag =false;

log.error("插入出错,pageNo为{}", pageNo, e);

}

}

log.info("插入结束时间为{}", LocalDateTime.now());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值