Сравнение методов сохранения с помощью нагрузочного теста между драйвером Jongo, драйвером Java MongoDB и MongoRepository

В дипломной работе я разработал REST API для операций выбора / сохранения между клиентом и базой данных. Данные будут отправлены с датчиков в формате JSON и сохранены в MongoDB . Мы выбрали три разные технологии для хранения: драйвер Jongo 1.3.0, драйвер Java MongoDB 3.4.0 и MongoRepository от Spring (с Jackson FasterXML). После внедрения мы начали с нагрузочных тестов через JMeter. Тестовый случай имел следующие параметры:

нити - 100, 250, 500, 1000

период разгона - 10 секунд

количество петель - 30

Предполагается, что драйверы будут более эффективными, чем MongoRepository, но в случае 1000 потоков MongoRepository загружает 400 запросов в секунду, и драйверы не могут обработать все запросы. Таким образом, MongoRepository может быстро и быстро хранить. Кто-нибудь может сказать, почему MongoRepository более эффективен?

РЕДАКТИРОВАТЬ:

MongoRepository выглядит так:

@Repository
public interface EndPointsMongoRepository extends 
MongoRepository<EndPointsDataControllerEntity, String> {
}

Метод десерализации JSON до сущности:

    private EndPointsDataControllerEntity parseDataFromJson(String json) {

    ObjectMapper mapper = new ObjectMapper();
    EndPointsDataControllerEntity controller = null;
    try {
        controller = mapper.readValue(json, EndPointsDataControllerEntity.class);
    } catch(JsonParseException ex){
        LOGGER.warn(" JsonParseException with message :" + ex.getMessage());
    } catch(JsonMappingException ex){
        LOGGER.warn("JsonMappingException with message :" + ex.getMessage());
    } catch(IOException ex){
        LOGGER.warn("IOException with message :" + ex.getMessage());
    }
    LOGGER.info("Id controller: " + controller.getIdController());
    return controller;
}

Тогда я только сохраняю данные.

Реализация драйвера Java MongoDB:

public void saveUnstructuredMeasuredData(String json) {

    LOGGER.info("Data saved to database by second way: \n" + json);
    com.mongodb.client.MongoCollection<Document> collection = getMongoClient().getCollection(UNSTRUCTURED_DATA);
    Document objectFromJson = Document.parse(json);

    objectFromJson.put(TIMESTAMP_MEASURE, createTimeMeasureAsTimestamp(objectFromJson));

    collection.insertOne(objectFromJson);
}

И Джонго:

public void saveUnstructuredMeasuredDataStraightWithShell(String json) {

    LOGGER.info("Data saved to database by third way: \n" + json);
    Jongo jongo = new Jongo(getMongoDB());

    MongoCollection measuredData = jongo.getCollection(MEASURED_DATA);
    measuredData.insert(json);
}

1 ответ

Джонго не водитель, он использует его. В основном, тот, который вы упомянули дальше, - это "официальный" драйвер. И третий - это даже интерфейс, который имеет две разные реализации - какая у вас?

Итак, видите, вы только что создали концептуальный беспорядок. И чтобы ответить на ваш вопрос, вам нужно получить подробную информацию о реализации для каждого случая.

Я могу только предположить, что, будучи корпоративной средой и достаточно зрелой средой, Spring имеет более эффективную параллельную реализацию, что-то с пулами соединений / рабочих или чем-то в этом роде.

Другие вопросы по тегам