У меня есть коллекция с 50 000 записей в MongoDB. Когда я пытаюсь показать ее на веб-странице. Это занимает много времени (около 7 минут для 15000 записей)
Я уже пробовал с индексированием, Но это не работает. Я написал метод в контроллере для извлечения данных из коллекции XYZ (я читаю 500 записей за раз в цикле). И я вызываю этот метод в методе переднего плана и использую его данные
Это мой метод Контроллера: Maincontroller.java:
public List<Data> getDataBetweenDates(String startDate, String endDate) {
List<Data> DataList = null;
Calendar cal = Calendar.getInstance();
// change regex accordingly
String[] start = startDate.split("-");
String[] end = endDate.split("-");
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(start[0]));
cal.set(Calendar.MONTH, Integer.parseInt(start[1]) - 1);
cal.set(Calendar.YEAR, Integer.parseInt(start[2]));
String startDateInMillis = cal.getTimeInMillis() + "";
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(end[0]));
cal.set(Calendar.MONTH, Integer.parseInt(end[1]) - 1);
cal.set(Calendar.YEAR, Integer.parseInt(end[2]));
String endDateInMillis = cal.getTimeInMillis() + "";
System.out.println("start = " + startDateInMillis + " end = " + endDateInMillis);
try {
DataList = DataDao.getDataBetweenDates(startDateInMillis, endDateInMillis);
} catch (Exception e) {
e.printStackTrace();
}
return DataList;
}
Это метод Дао Реализация:
@Override
public List<Data> getDataBetweenDates(String startDate, String endDate) throws Exception {
List<Data> DataList = new ArrayList<>();
JSONObject jObj = null;
JSONObject query = new JSONObject();
JSONObject start = new JSONObject();
start.put("$gte",startDate);
start.put("$lte", endDate);
query.put("timestamp", start);
long totalCount = dbService.count(Data.COLLECTION, query);
for(int j = 0 ; j <= totalCount; j+=500){
jObj = dbService.find(Data.COLLECTION, query, new JSONObject(),new JSONObject(),j,500);
if (!jObj.has("value")) {
return DataList;
}
for (int i = 0; i < jObj.getJSONArray("value").length(); i++) {
Data Data = gson.fromJson(jObj.getJSONArray("value").getJSONObject(i).toString(), Data.class);
DataList.add(Data);
}
}
jObj = null;
query = null;
return DataList;
}
Есть ли способ, которым я могу сократить время загрузки.