Как получить или получить большие данные из базы данных Mongo в интерфейс на Java? - PullRequest
0 голосов
/ 15 июня 2019

У меня есть коллекция с 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;
    }

Есть ли способ, которым я могу сократить время загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...