Что такое хранилище данных?
1. Введение
Если вы студент, аналитик, инженер или кто-либо еще в сфере данных, важно понимать, что такое хранилище данных. Если вам интересно
- Что такое хранилище данных?
- Когда мне следует начать использовать хранилище данных?
Тогда этот пост для вас. К концу этого поста вы поймете, что такое хранилище данных, какие типы баз данных можно использовать в качестве хранилища данных и как выбрать правильное хранилище данных для вашего случая.
2. Бизнес-требования: информационные панели и аналитика
Предположим, вы работаете в онлайн-магазине, где продавец может перечислить свои товары, а покупатели могут их купить. Предположим, у нас есть два микросервиса, которые обрабатывают клиентов и продавцов соответственно.
По мере роста нашей компании нам может понадобиться анализировать данные для различных бизнес-целей. Продавцы также захотят проанализировать производительность и тенденции, чтобы оптимизировать свои запасы. Вот некоторые из возможных вопросов и пожеланий:
- Получить список из 10 продавцов, которые продали больше всего?
- Какое среднее время выполнения заказа?
- Определите клиентов, которые купили одинаковые/похожие товары одновременно.
- Создайте панель инструментов продавца, которая показывает самые эффективные товары для каждого продавца.
Эти вопросы касаются того, что произошло в прошлом, требуют чтения большого количества данных и их агрегирования для получения результата. На эти вопросы можно ответить, запросив хранилище данных.
3. Что такое хранилище данных
Хранилище данных — это база данных, которая содержит все исторические данные вашей компании и используется для выполнения аналитических запросов. В нашем примере мы не можем анализировать данные о товаре и продавце в одной базе данных. Нам нужно перенести оба набора данных в наше хранилище данных, как показано ниже.
Существует несколько шаблонов проектирования для хранилищ данных, вот самые популярные из них:
- Объемное моделирование – Kimball
- Хранилище данных - Inmon
- Витрина данных
- Плоский стол
На нашей диаграмме потока данных у нас есть модели fct_* и dim_*. Они следуют пространственному моделированию Кимбалла.
В зависимости от размера ваших данных, использование базы данных приложения для аналитических запросов может быть вполне допустимым решением. Вы также можете читать реплику базы данных вашего приложения и выполнять к ней аналитические запросы, чтобы не влиять на производительность приложения.
4. OLTP и хранилища данных на основе OLAP
Существует два основных типа баз данных: OLTP и OLAP. Их отличия показаны ниже.
OLTP |
OLAP |
|
---|---|---|
Обозначает |
Онлайн-обработка транзакций |
Онлайн аналитическая обработка |
Шаблон использования |
Оптимизирован для быстрого CRUD (создание, чтение, обновление, удаление) небольшого количества строк |
Оптимизирован для запуска select c1, c2, sum(c3),.. где .. group by по большому количеству строк (аналогично аналитическим запросам) и приема больших объемов данных через массовый импорт или поток событий. |
Тип хранилища |
Ориентирован на строку |
Ориентирован на столбцы |
Моделирование данных |
Моделирование данных основано на нормализации |
Моделирование данных основано на денормализации. Некоторые популярные из них — многомерное моделирование и хранилища данных. |
Состояние данных |
Представляет текущее состояние данных |
Содержит исторические события, которые уже произошли |
Размер данных |
Гигабайты в Терабайты |
Терабайты и выше |
Пример базы данных |
MySQL, Postgres и т.д. |
ClickHouse, AWS Redshift, Snowflake, GCP BigQuery и т. д. |
Основное улучшение аналитических запросов в OLAP связано с его методом хранения столбцов. Давайте рассмотрим элементы таблицы с данными, показанными ниже.
item_id |
item_name |
item_type |
item_price |
datetime_created |
datetime_updated |
---|---|---|---|---|---|
1 |
item_1 |
gaming |
10 |
‘2021-10-02 00:00:00’ |
‘2021-11-02 13:00:00’ |
2 |
item_2 |
gaming |
20 |
‘2021-10-02 01:00:00’ |
‘2021-11-02 14:00:00’ |
3 |
item_3 |
biking |
30 |
‘2021-10-02 02:00:00’ |
‘2021-11-02 15:00:00’ |
4 |
item_4 |
surfing |
40 |
‘2021-10-02 03:00:00’ |
‘2021-11-02 16:00:00’ |
5 |
item_5 |
biking |
50 |
‘2021-10-02 04:00:00’ |
‘2021-11-02 17:00:00’ |
Давайте посмотрим, как эта таблица будет храниться в хранилище, ориентированном на строки и столбцы. Данные будут храниться в виде страниц (групп записей) на диске.
Строчное хранилище:
Предположим, что на странице есть одна строка.
Page 1: [1,item_1,gaming,10,'2021-10-02 00:00:00','2021-11-02 13:00:00'], Page 2: [2,item_2,gaming,20,'2021-10-02 01:00:00','2021-11-02 14:00:00'] Page 3: [3,item_3,biking,30, '2021-10-02 02:00:00','2021-11-02 15:00:00'], Page 4: [4,item_4,surfing,40, '2021-10-02 03:00:00','2021-11-02 16:00:00'], Page 5: [5,item_5,biking,50, '2021-10-02 04:00:00','2021-11-02 17:00:00']
Хранилище, ориентированное на столбцы:
Предположим, что на странице есть одна колонка.
Page 1: [1,2,3,4,5], Page 2: [item_1,item_2,item_3,item_4,item_5], Page 3: [gaming,gaming,biking,surfing,biking], Page 4: [10,20,30,40,50], Page 5: ['2021-10-02 00:00:00','2021-10-02 01:00:00','2021-10-02 02:00:00','2021-10-02 03:00:00','2021-10-02 04:00:00'], Page 6: ['2021-11-02 13:00:00','2021-11-02 14:00:00','2021-11-02 15:00:00','2021-11-02 16:00:00','2021-11-02 17:00:00']
Посмотрим, как будет выполняться простой аналитический запрос.
SELECT item_type, SUM(price) total_price FROM items GROUP BY item_type;
В базе данных, ориентированной на строки
- Все страницы нужно будет загрузить в память
- Столбец суммы цен для одинаковых значений item_type
В базе данных, ориентированной на столбцы
- В память нужно будет загрузить только страницы 3 и 4
- Столбец суммы цен для одинаковых значений item_type
Как вы можете видеть из этого подхода, нам нужно прочитать только 2 страницы в базе данных, ориентированной на столбцы, по сравнению с 5 страницами в базе данных, ориентированной на строки. В дополнение к этому, база данных, ориентированная на столбцы, также обеспечивает
- Лучшее сжатие, так как похожие типы данных расположены рядом друг с другом и могут быть сжаты более эффективно.
- Векторизованную обработку
Все эти функции делают базу данных, ориентированную на столбцы, отличным выбором для хранения и анализа больших объемов данных.
5. Вывод
Резюмируя, мы можем сказать:
- Что такое хранилище данных.
- Какие есть бизнес-требования к хранилищу данных.
- Каковы различия между использованием OLTP и базы данных OLAP в качестве хранилища данных.
При выборе хранилища данных всегда полезно выбирать то, которое лучше всего подходит для обработки того объема данных, который, по вашим оценкам, должен находиться в вашем хранилище данных. Например, выбор дорогого хранилища данных OLAP, когда у вас всего несколько ГБ данных, будет не лучшим решением.
В следующий раз, когда вы будете выбирать хранилище данных, используйте эту сравнительную таблицу, чтобы принять правильное решение для вашего варианта использования.
Если у вас есть какие-либо вопросы или комментарии, пожалуйста, оставьте их ниже под этим текстом.