Друид: как он использует кеш и кеш страниц ОС?
Я наблюдаю, что производительность запросов Druid может выиграть от предыдущих запросов. Таким образом, я пытаюсь понять причины. Я знаю, что Друид использует кеш (я использую кеш в Брокере), но этот кеш просто хранит результаты запросов на сегмент (верно?). Однако я заметил, что если последующие запросы используют одни и те же сегменты, производительность улучшается.
Пример:
- Выберите сумму (метрика), dimteste2, dimteste3 из таблицы x, где dimteste='x', группа по dimteste2, dimteste3 -> 2 секунды
- Выберите сумму (метрика), dimteste2, dimteste3 из таблицы x, где dimteste3= группа 'y' по dimteste2, dimteste3 -> 0,5 секунды
Я искал и обнаружил, что такое поведение может быть достигнуто кеш страницы ОС. Основываясь на моих исследованиях, я думаю, что Druid во время первого запроса к источнику данных загружает необходимые сегменты в память (кэш страницы ОС). И сегменты могут быть прочитаны быстрее в следующих запросах.
Я прав? Я посмотрел в документации друида и не смог найти ничего полезного.
Не могли бы вы помочь мне объяснить это удивительное поведение?
С наилучшими пожеланиями,
Хосе Коррейя
1 ответ
Друид использует кэширование для улучшения производительности на разных уровнях. На уровне сегмента по истории и по запросу друида на брокере. Чем больше памяти вы отдаете, тем быстрее он работает.
Ниже приведена документация по кешированию -
Кэширование запросов
Друид поддерживает кеширование результатов запроса через кеш LRU. Результаты сохраняются для каждого сегмента вместе с параметрами данного запроса. Это позволяет Druid возвращать окончательные результаты, основываясь частично на результатах сегментов в кэше и частично на результатах сегментов при сканировании исторических / реальных сегментов.
Результаты сегмента могут быть сохранены в локальном кэше кучи или во внешнем распределенном хранилище ключей / значений. Кэширование сегментированных запросов может быть включено как на уровне истории, так и на уровне брокера (не рекомендуется включать кэширование на обоих).
Кэширование запросов на брокерах
Включение кэширования на брокере может дать более быстрые результаты, чем если бы кэширование запросов было включено в Historicals для небольших кластеров. Это рекомендуемая настройка для небольших производственных кластеров (< 20 серверов). Обратите внимание, что при включенном кэшировании в брокере результаты из хронологических данных возвращаются для каждого сегмента, и исторические данные не смогут выполнять локальное объединение результатов.
Кэширование запросов по истории
Более крупные производственные кластеры должны включать кэширование только в журналах Historicals, чтобы избежать необходимости использовать брокеров для объединения всех результатов запросов. Включение кэширования в Historicals вместо Brokers позволяет Historicals самостоятельно объединять локальные результаты и снижает нагрузку на Brokers.
Брокер Druid ничего не делает напрямую в кеше страницы ОС, если ОС предоставляет виртуальную память, а затем в зависимости от требований к памяти выделяются кучи.