Рамката за агрегиране е жизненоважно зъбно колело в инфраструктурата на MongoDB. Той ви помага да анализирате, обобщавате и агрегирате данните, съхранявани в MongoDB. Вижте тази публикация в блога за повече подробности относно рамката за агрегиране в MongoDB 2.6.
В версията 2.6 MongoDB направи фина, но значителна промяна в начина, по който основните конвейери за агрегация се изпълняват в разчленена среда. Когато работите с разчленени колекции, MongoDB разделя конвейера на два етапа. Първият етап или фазата „$ съвпадение“ се изпълнява на всеки шард и избира съответните документи. Ако плановникът на заявки определи, че даден фрагмент не е уместен въз основа на ключовете на сегмента, тогава тази фаза не се изпълнява върху този фрагмент.
Последващите етапи се изпълняват само върху „основния“ фрагмент за колекцията. Този фрагмент обединява данните от другите фрагменти и изпълнява останалата част от конвейера. Това води до значително по-голямо натоварване на основния фрагмент на колекцията, който се агрегира. Ето пример от един от нашите клиенти, който използва три сегмента и използва предимно заявки за агрегиране:
Както виждате, натоварването на първия фрагмент е постоянно 3-4 пъти повече от другата причина. Това е екстремен пример, тъй като това в случай, че вторият и третият фрагмент са добавени по-късно, следователно основният фрагмент за всички колекции е първият фрагмент. Така че по същество следващите етапи на всички наши задачи за агрегиране се изпълняват само на Shard1. Ако прегледате регистрационните файлове на основния шард, ще видите редица команди за „сливане“, извличащи данни от другите фрагменти.
Преди 2.6 следващите етапи на тръбопровода за агрегиране се изпълняваха на вашите MongoDB сървъри, а не на основния шард.
И така, как се справяте с това неравномерно разпределение на натоварването? Имате няколко опции:
- Ако изпълнявате агрегирания в множество колекции, уверете се, че „основните фрагменти“ на колекциите са равномерно разпределени във вашите фрагменти.
- Ако имате голямо агрегиращо натоварване само на една колекция, може да се наложи да използвате малко по-големи машини за основния си фрагмент.
Както винаги, ако имате въпроси или коментари, моля, изпратете ни имейл на [email protected].