Низкая производительность при попытке запросить mongodb с более чем 30 миллионами документов на Java

#java #mongodb #performance #document

#java #mongodb #Производительность #документ

Вопрос:

Я создаю API для извлечения документов из mongodb, в mongo более 30 миллионов документов, для запроса документов в этой структуре требуется около 45-60 секунд, используя приведенный ниже Java-код для запроса документов в этой структуре:

    {
    "Type": "CUS",
    "ID": "01010101",
    "Set": [
        {
            "Group": "Marketing",
            "Rule": "Rule_1",
            "Ind": "Y", 
        },
        {
            "GroupName": "Sales",
            "RuleName": "Rule_2",
            "Ind": "N",
        }
    ]
   }


    BasicDBObject query = new BasicDBObject();

    query.put("ID", new BasicDBObject("$in", payload.getIds()));

    FindIterable<Document> documents = collection.find(query);

    for (Document doc : documents) {

        // looping through docs and then construct some objects and returns the result to the controller class

    }
  

похоже, что это занимает слишком много времени в части цикла «для (Document doc: documents)», я не уверен, что происходит, не могли бы вы, пожалуйста, помочь.

Спасибо, и я ценю это.

Комментарии:

1. На данный момент максимальное количество идентификаторов «payload.getIds()» в запросе равно 200, не уверен, что это было основной проблемой!

2. Есть ли у поля ID созданный для него индекс? Похоже, вы создали поле ID, отличное от поля _id, я прав?

3. да, нет индекса для других созданных мной идентификаторов

4. Я только что добавил индекс к идентификатору, и теперь я получил действительно быструю производительность. Спасибо!