Столковое хранилище стало изменением игры в разработке данных и аналитическом ландшафте. Он предлагает значительные преимущества производительности по сравнению с традиционными базами данных, ориентированными на строки.
Идея хранения данных в столбцах не нова. Впервые он был всесторонне в 1985 году GP Copeland и Sn Hoshafian. Их статья «Модель хранения разложения (DSM)» предлагала хранение данных в бинарных отношениях, соединяя каждое значение атрибута с идентификатором записи. Этот подход организовал данные по столбцам, а не рядам, предлагая простоту и преимущества для производительности поиска для запросов, включающих подмножество атрибутов. Тем не менее, это требовало больше места для хранения в целом.
Исследователи начали разрабатывать MonetDB в 1999 году и выпустили его в качестве проекта с открытым исходным кодом в 2004 году. Он стал одной из первых систем, которая использовала столбчатую архитектуру для аналитических рабочих нагрузок и демонстрирует свою эффективность. C Store, разработанный в середине 2000-х годов, отметил еще одну важную веху. Он представил передовые концепции, которые в настоящее время являются стандартами в современных столбчатых системах хранения.
Разработки в этой области ускорились в конце 2000 -х и начале 2010 -х годов, причем такие проекты, как Apache Parquet (под влиянием Google Dremel Paper), доставляющие столбцовое хранилище в экосистему Hadoop.
Основная концепция: Столбец против строки, ориентированные на хранение
Традиционные базы данных, ориентированные на строки, хранят все данные для одной строки вместе. Ряд означает сущность, которую вы хотите моделировать. С этой точки зрения, и для этого поста рассмотрите ориентированную на документ базу данных, такую как MongoDB-ориентированную, поскольку она хранит весь документ (объект) вместе, аналогично базам данных, ориентированным на строки. Напротив, столбчатые хранилища данных организуют данные в столбцах, каждый из которых содержит значения для одного атрибута во всех строках. Это, казалось бы, простое изменение имеет глубокие последствия для производительности.
Предикаты и прогнозы в обработке запросов
Есть две ключевые понятия, которые нужно понять при обсуждении транзакционных и аналитических систем:
Предикаты это условия, с помощью которых вы фильтровали сущности (строки), которые вы хотите (думайте о них как о пункте, где в SQL -запросе).
Прогнозы Являются ли поля (столбцы), которые вы хотите в ответе (подумайте о них как о названиях, которые вы определяете в операторе SELECT).
Если вы думаете о своих данных как о списке строк вертикально сложены, предикают их горизонтально, и проекции нарезают их по вертикали.
Транзакционные запросы часто полагаются на предикаты фильтрования строк, с проекциями, охватывающими всю строку (например, выберите * из заказов, где user_id = 1234). Напротив, прогнозы в аналитических запросах включают небольшое подмножество полей из запрашиваемого объекта (например, выберите user_id, имя, num_orders из user_aggregates, где user_id = 1234).
Рассмотрим таблицу с 50 столбцами и миллионами рядов. В системе, ориентированной на строку, если вам нужно всего три столбца, базе данных все равно должна была бы прочитать все 50 столбцов для каждой строки. При обращении с столбцом, доступ к столбцам, доступны только три соответствующих столбца, массово снижая накладные расходы ввода/вывода, то есть объем данных, обрабатываемых в аналитических запросах.
Ключевые методы питания столбчатых магазинов
Хранение данных в столбцах обеспечивает различные оптимизации, которые значительно улучшают производительность запросов. Вот ментальная модель: подумайте о выполнении запроса как о трубопроводе, который передает данные на различных этапах, преобразуя его на каждом этапе. Чем меньше данные, тем ниже стоимость и тем быстрее трубопровод.
Сокращение данных, с которыми вы работаете, может быть сделано несколькими способами:
Эффективное представление данных (сжатие данных, сжатие специфического столбца)
Фильтровать данные на ранней стадии (обрезка столбца, отжимание предиката)
Расширение данных как можно позже (Прямая операции по сжатым данным, поздняя материализация)
Более быстрая обработка данных (векторизованное выполнение, оптимизированные соединения)
Эти методы взаимосвязаны и полагаются друг на друга для максимального повышения производительности.
Сжатие данных и сжатие, специфичное для столбца
Столковое хранилище обеспечивает высокие коэффициенты сжатия, потому что данные в пределах одного столбца имеют одинаковый тип и имеют аналогичные шаблоны. Методы, такие как Кодирование словаря, кодирование длины пробежки (RLE), битовая упаковка и Delta Coding обычно используются в современных столбчатых магазинах.
Например, в отслеживании базы данных Web Analytics источник пользовательского трафика в исходном столбце обычно имеет небольшой набор уникальных значений. Это позволяет:
Словарь кодирование: Присвоить целочисленные значения значениям строки (например, email = 1, Twitter = 2).
Кодирование длины пробега (RLE): Если последовательные записи имеют одинаковое значение, храните их как (значение, счет).
Битовая упаковка: Если существует только несколько уникальных значений, используйте меньше битов на значение вместо полного целого числа.
Обрезка колонны
Обрезка столбцов устраняет ненужные столбцы из выполнения запросов. Рассмотрим запрос:
Выберите First_name, Last_name, электронная почта, телефон от пользователей, где num_orders> 10
Если таблица имеет 100 столбцов, но запрос нуждается только в пять, обрезка столбцов уменьшает накладные расходы ввода/вывода на 95%.
Предикат отжимания
Предикат фильтров отдавливания как можно раньше в трубопроводе выполнения запроса. С помощью карты зоны (Метаданные, которые отслеживают значения Min/Max в блоках хранения), базы данных могут пропускать целые блоки, которые не соответствуют критериям фильтра.
Например, в запросе:
Выберите имя от пользователей, где возраст> 30 и City = ‘New York’
Столбетическая база данных может сначала фильтровать блоки на основе метаданных перед сканированием отдельных строк, уменьшая ненужную обработку.
Прямая работа по сжатым данным
Столбетические базы данных могут выполнять операции непосредственно на сжатых данных, минимизируя затраты ввода/вывода. Рассмотрим запрос:
Выберите сумму (зарплата) от сотрудников, где отдел = 1002
Используя кодирование словаря и RLE, только соответствующие данные читаются и расширяются на последнем этапе, значительно повышая производительность.
Поздняя материализация
Поздняя материализация делится на загрузку ненужных столбцов, пока не понадобится. В запросе:
Выберите имя от пользователей, где возраст> 30 и City = ‘New York’
Только возраст и город обрабатываются изначально, а столбец названия загружается на последнем этапе.
Векторизованная обработка
SIMD (отдельная инструкция, несколько данных) позволяет процессорам выполнять операции на нескольких значениях параллельно. Учитывать:
Выберите сумму (цена) из продаж, где user_id = 1234
Вместо того, чтобы оценивать user_id row-by-row, SIMD сравнивает 256 значений за раз, что приводит к значительному ускорению.
Эффективные реализации соединения
Сторонные базы данных реализуют расширенные методы соединения, такие как Полу-младшие с использованием Блум фильтрыПолем Эти структуры позволяют базам данных эффективно проверять, существует ли значение в наборе данных, снижая ненужные сравнения.
Например, в соединении:
Выберите * Из заказов o Присоединяйтесь к клиентам C on o.customer_id = c.id, где c.region = ’emea’ 123 Select * Из заказов o Присоединяйтесь к клиентам C на o.customer_id = c.id c.region = ’emea’
Фильтр Bloom создан для действительных клиентов, что позволяет базе данных быстро отбрасывать неактуальные заказы.
Заключение
Сторожные хранилища данных предоставляют:
Эффективность хранения через сжатие
Снижение ввода/вывода через обрезку столбца и отжимание предиката
Более быстрое исполнение Использование векторизованной обработки и оптимизированных соединений
Они широко используются в веб-аналитике, бизнес-аналитике, инфраструктуре машинного обучения и аналитике в реальном времени.
Если вы являетесь практиком данных, понимание этих внутренних органов может помочь вам оптимизировать производительность. Если вы инженерный лидер, эти методы помогут вам оценить компромиссы и принимать стратегические решения для вашей организации.
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Я являюсь директором по технике инженерии в Opentable, создаю системы управления данными клиентов и разведки в линейке гостеприимства. Прежде чем заняться руководящей и руководящей должности, я работал инженером фронтального и движения за … Подробнее от Гаурава Рамеша