Paper Background
00:00:00Google Dremel, представленный в 2008 году, оказал длительное влияние на системы обработки данных. Его влияние сохраняется и более 15 лет спустя благодаря интеграции в систему Google BigQuery. В 2020 году он был признан за свою значимость и получил награду "Испытание временем" от DB.
What is Dremel
00:00:37В 2008 году перед Google встала задача эффективного анализа огромного объема данных, чтобы извлечь полезную информацию для принятия решений. Традиционные методы, такие как MapReduce, требовали от инженеров написания и выполнения кода для каждого запроса, что приводило к длительному циклу итераций, часто длящемуся несколько дней, для получения результатов. Этот процесс затруднял быстрое принятие решений, поскольку менеджерам по продуктам приходилось постоянно запрашивать у инженеров новые сценарии на основе возникающих вопросов. Потребность была очевидна: для неинженеров, таких как CXO и менеджеры по продуктам, был найден более быстрый способ напрямую запрашивать массивные наборы данных, не полагаясь на инженерные ресурсы.
Features
00:03:23Google столкнулась с проблемами, когда менеджеры по продуктам и инженеры сталкивались с неэффективностью запросов к данным, часто полагаясь на медленную работу MapReduce. Чтобы решить эту проблему, они разработали интерактивную аналитическую систему, способную выдавать результаты запросов в течение минуты и снижать зависимость от инженеров-программистов. Предоставляя менеджерам по продуктам или аналитикам данных возможность напрямую создавать SQL-запросы с помощью удобных инструментов, Google оптимизировал работу и высвободил инженерные ресурсы для других задач. Этот подход делал упор на быстрые процессы фильтрации и агрегирования, ориентированные на статистические данные, такие как количество или процент, а не на необработанные данные на уровне строк.
High-level Architecture
00:06:08Архитектура запросов Dremel и управление сегментами В Dremel используется иерархическая архитектура запросов, при которой клиенты взаимодействуют через информационные панели или интерфейсы, отправляя запросы в диспетчер запросов. Диспетчер запросов действует как ограничитель скорости и балансировщик нагрузки, определяя, какие сегменты физического сервера должны обрабатывать определенные диапазоны ключей в зависимости от их текущей нагрузки. Запросы передаются от корневых узлов к конечным узлам древовидной структуры; каждый сегмент рекурсивно обрабатывает вложенные сегменты, пока данные не будут извлечены локально или из распределенных файловых систем, таких как Colossus (ранее GFS). Результаты агрегируются по родительским сегментам обратно в корень для получения окончательного ответа.
Интеграция систем Google с эффективной древовидной обработкой данных Google интегрирует Dremel в свою экосистему: хранилище с помощью Colossus, сеть - с помощью Jupiter, вычислениями и памятью управляет Borg в Kubernetes, а конфигурацией управляет Spanner. Вычислительная мощность для запросов зависит от комбинаций машинных потоков, которые можно динамически корректировать, что влияет на время обработки. Эта эффективная древовидная система агрегирования данных обеспечивает быстрое реагирование - часто в течение нескольких секунд — что позволяет пользователям быстро принимать решения без длительных задержек.
Approximations
00:10:26Система использует механизм кэширования с предварительной выборкой для извлечения данных, относящихся к последним запросам, что обеспечивает 95%-ный процент совпадений. Это уменьшает потребность в более глубоком или медленном доступе к хранилищу и значительно сокращает задержку запросов. Кроме того, приблизительные результаты используются в тех случаях, когда не требуется идеальная точность; это позволяет получать ответы с полнотой 98-90%, не дожидаясь ввода данных от всех узлов. Такая оптимизация позволяет быстрее анализировать большие наборы данных, например, находить лучшие видеоролики на YouTube без исчерпывающего поиска.
Columnar Storage
00:12:20Dremel оптимизирует обработку данных, используя столбчатое хранилище, которое упорядочивает данные по столбцам, а не по строкам. Такой подход позволяет ускорить сканирование для получения совокупной статистики, поскольку требуется считывать меньшее количество точек данных последовательно. Кроме того, совместное хранение схожих типов данных позволяет использовать эффективные алгоритмы сжатия, такие как кодирование с ненулевой продолжительностью цикла или пользовательские методы Google, основанные на кодировании Хаффмана. Эти методы сокращают объем хранилища и требования к пропускной способности, сохраняя простоту распаковки при выполнении запросов.
Final thoughts
00:15:47Google Dremel - это краткий восьмистраничный документ, в котором эффективно изложены основные идеи, позволяющие быстро понять и применить их на практике. Заключительные положения алгоритма имеют сходство с более широкими концепциями системного проектирования. Для получения дополнительной информации или обратной связи зрителям предлагается принять участие в обсуждении или ознакомиться с соответствующими проектами, такими как Interview Ready.