Mongo查询百万级数据性能问题及JAVA优化问题

Mongo查询百万级数据  使用分页  skip和limit 效率会相当慢   那么怎么解决呢  上代码

全部查询数据也会特别慢

Criteria criteria = new Criteria();
List<Criteria> params = new ArrayList<>();
params.add(Criteria.where("is_deleted").is(0));
params.add(Criteria.where("is_pop").is(0));
Criteria[] cArr = new Criteria[params.size()];
criteria.andOperator(params.toArray(cArr));
Query query1 = new Query(criteria);
Sort.Order order = new Sort.Order(Sort.Direction.ASC, "_id");
int size = 2000;
int page = 0;
List<AreaSsuPriceMongoEntity> all = new ArrayList<>();
while (true) {
List<AreaSsuPriceMongoEntity> entities = areaSsuPriceMongoDao.findList(query1, order, 0, size);
if (CollectionUtils.isEmpty(entities)) {
break;
}
all.addAll(entities);
Criteria criteria2 = new Criteria();
String id = entities.get(entities.size() - 1).getId();
ObjectId objectId = new ObjectId(id);
if (params.size() > 2) {
params.remove(params.size() - 1);
}
params.add(Criteria.where("_id").gt(objectId));
Criteria[] cArr2 = new Criteria[params.size()];
criteria2.andOperator(params.toArray(cArr2));
query1 = new Query(criteria2);
}




java List 性能问题
List.removeAll 在大数据量的情况下 效率会特别低 包括 remove 尤其是 ArrayList
怎么解决 不使用ArrayList 或者重新记录不需要删除的数据存入list

java 百万级数据 * 百万级数据遍历 效率是否高效?
可以分组处理...

查询大数据量时 不可以直接全部查询 一定要分页查询 循环查出然后addAll处理
查mongo 及 mysql 都是必要的

insert and update 数据库时 一定要批量处理
不可以循环一条一条处理 效率特别低


数据量大的时候update数据时不可以全部一次性update
一定要分批 分页处理 sublist 一次多少条

转载于:https://www.cnblogs.com/dj66194/p/9118123.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用MongoDBJava驱动程序(Java Driver)来进行查询操作,并在查询时使用投影(projection)来排除某些字段。 以下是一个使用Java驱动程序进行MongoDB查询并排除字段的示例代码: ```java import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; import java.util.Arrays; public class MongoProjectionExample { public static void main(String[] args) { // 创建MongoDB客户端 MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017"); // 获取要查询数据库和集合 MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("users"); // 创建投影文档,排除age字段 Document projection = new Document("age", 0); // 执行查询操作并输出结果 collection.find().projection(projection).forEach( document -> System.out.println(document.toJson()) ); // 关闭MongoDB客户端 mongoClient.close(); } } ``` 在上述示例代码中,使用了`projection()`方法来指定投影文档,其中排除了`age`字段。在查询结果中,将不会包含`age`字段。 注意:需要在查询结果中包含_id字段,因为它是MongoDB中每个文档的唯一标识符。如果要排除_id字段,可以使用`projection()`方法的另一种形式,如下所示: ```java Document projection = new Document("_id", 0).append("age", 0); ``` 这将排除_id和age两个字段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值