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 一次多少條
