MongoDB使用游标MongoCursor查询海量数据

MongoDB使用游标MongoCursor查询海量数据1.业务场景大约70几万条MongoDB数据迁移到mysql刚开始是先查询总数,然后再根据总数进行分页查询,如果数据量特别大,查询到后面的页会越来越慢,此种情况,可以根据实际情况,对数据进行排序查询后,查询条件加上大于上页最后一条数据的排序键来提升速度。“`javaDatebeginTime=DateUtil.parse(startDate+”00:00:00″,DateUtil.PATTERN_DATETIME);DateendTime=DateUtil…

大家好,欢迎来到IT知识分享网。MongoDB使用游标MongoCursor查询海量数据"

1.业务场景

大约70几万条MongoDB数据迁移到mysql

刚开始是先查询总数,然后再根据总数进行分页查询,如果数据量特别大,查询到后面的页会越来越慢,此种情况,可以根据实际情况,对数据进行排序查询后,查询条件加上大于上页最后一条数据的排序键来提升速度。

Date beginTime = DateUtil.parse(startDate + " 00:00:00", DateUtil.PATTERN_DATETIME);
        Date endTime = DateUtil.parse(endDate + " 23:59:59", DateUtil.PATTERN_DATETIME);
        //查询指定时间之间的数据
        Query query = new Query().addCriteria(Criteria.where("createTime").gte(beginTime).lte(endTime));
        query.with(new Sort(Sort.Direction.DESC,"createTime"));
        long amount = mongoTemplate.count(query, XXEntity.class);
        int page = (int)amount / PAGE_LIMIT;
        if(amount % PAGE_LIMIT > 0 ){
            //余数不为0时,要加1
            page += 1;
        }
        query.limit(PAGE_LIMIT);
        for(int i =0; i < page;i++){
            query.skip(i * PAGE_LIMIT);
            List<XXEntity> entities = mongoTemplate.find(query, XXEntity.class);
        }

这里,我们使用mongo查询中更友好的查询方式:游标,来实现在mongo中对海量数据的查询。

   Query query=new Query();
        query.addCriteria(
                Criteria.where("status").is(2)
                .and("isDeleted").is(0));
                //指定查询集合
        MongoCursor<Document> cursor = mongoTemplate.getCollection("t_xxxxxxx")
                //组装查询条件
                .find(query.getQueryObject())
                //组装排序方式(非必须,可不设置)
                .sort(query.getSortObject())
                //设置游标查询不超时
                .noCursorTimeout(true)
                //设置批量从数据库中获取的数据量
                .batchSize(2000)
                .iterator();
       
        while (cursor.hasNext()){
            Document next = cursor.next();
            next.get("_id")
            
        }

这种方式70w条数据处理不到10分钟。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/14450.html

(0)
上一篇 2024-02-24 15:45
下一篇 2024-03-05 19:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信