Почему мой трубопровод агрегации MongoDB значительно медленнее в PRD по сравнению с DEV с аналогичными данными?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему мой трубопровод агрегации MongoDB значительно медленнее в PRD по сравнению с DEV с аналогичными данными?

Сообщение Anonymous »

Мы используем довольно сложный трубопровод агрегации MongoDB в приложении Java Spring Boot с API Mongotemplate.aggregate. Трубопровод включает в себя совпадение, проект, несколько поисков, разматывания, группы, добавок и окончательного проекта. < /P>
Aggregation aggregation = Aggregation.newAggregation(
match(Criteria.where("isFeatureEnabled").is(true)),

project("entityId"),

lookup("relatedEvents", "entityId", "foreignEntityId", "events"),

unwind("events"),

project().and("events.referenceId").as("referenceId"),

lookup("referenceCatalog", "referenceId", "catalogId", "referenceDetails"),

unwind("referenceDetails"),

group("referenceDetails.severityLevel", "referenceDetails.category")
.count().as("eventCount"),

addFields()
.addFieldWithValue("severity",
ConditionalOperators.switchCases(
ConditionalOperators.Switch.CaseOperator.when(ComparisonOperators.Eq.valueOf("severityLevel").equalToValue(1)).then("LOW"),
ConditionalOperators.Switch.CaseOperator.when(ComparisonOperators.Eq.valueOf("severityLevel").equalToValue(2)).then("MEDIUM"),
ConditionalOperators.Switch.CaseOperator.when(ComparisonOperators.Eq.valueOf("severityLevel").equalToValue(3)).then("HIGH"),
ConditionalOperators.Switch.CaseOperator.when(ComparisonOperators.Eq.valueOf("severityLevel").equalToValue(4)).then("CRITICAL")
).defaultTo("UNKNOWN")
)
.addFieldWithValue("category",
ConditionalOperators.switchCases(
ConditionalOperators.Switch.CaseOperator.when(ComparisonOperators.Eq.valueOf("category").equalToValue("TypeA")).then("TYPE_A"),
ConditionalOperators.Switch.CaseOperator.when(ComparisonOperators.Eq.valueOf("category").equalToValue("TypeB")).then("TYPE_B"),
ConditionalOperators.Switch.CaseOperator.when(ComparisonOperators.Eq.valueOf("category").equalToValue("TypeC")).then("TYPE_C"),
ConditionalOperators.Switch.CaseOperator.when(ComparisonOperators.Eq.valueOf("category").equalToValue("TypeD")).then("TYPE_D")
).defaultTo("UNKNOWN")
)
.build(),

project("severity", "category", "eventCount")
);

List results = mongoTemplate
.aggregate(aggregation, "mainEntities", AggregatedResult.class)
.getMappedResults();
< /code>
Мы запускаем этот конвейер как в средах DEV, так и в средах PRD, используя один и тот же код и почти идентичные наборы данных (индексы существуют с обеих сторон). Тем не менее, время выполнения значительно отличается: < /p>
dev занимает около 2 минут < /p>
prd, который занимает около 4 минут < /p>
, что может быть причиной таких различий в производительности между Dev и Prd, несмотря на: < /p>
my ром и индексы (On intity) < /p> . Версия < /p>
Тот же конвейер агрегации < /p>
Аналогичное оборудование (насколько мы можем судить) < /p>
Существуют ли конкретные инструменты профилирования или конфигурации mongodb (например, память, диск, индексный кэш, различия в плановых плановых планах), которые мы должны искать? Любое руководство или прошлый опыт будут оценены.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... pared-to-d
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»