Эволюция Хранилища Данных В Авито

Сейчас Хранилище Данных в Авито — это установка на 32 серверах.

Мы используем девятую версию Vertica и ClickHouse. В бригаде, ответственной за хранилище, работает 21 человек.

Поток событий, которые мы загружаем, достигает 20 миллионов событий в минуту.

Расскажу, как изменилось наше аналитическое хранилище данных с 2013 года.

Обозначу, что у нас было в начале пути, поделюсь историей борьбы за производительность и покажу, куда мы пришли.

О некоторых вещах мы уже говорили в статье о продуктовом подходе к СХД , но я уделю больше внимания техническим деталям и преодолению технических трудностей.



Эволюция хранилища данных в Авито



2013-2017. Начало пути

Еще в 2013 году мы выбрали методологию якорного моделирования для построения нашего хранилища.

Это сверхнормализованная модель данных, в которой каждый атрибут хранится в отдельной таблице.

Все таблицы состоят из трех столбцов: идентификатор объекта, значение атрибута и время, когда значение стало актуальным.



Эволюция хранилища данных в Авито

Иллюстрация методологии якорного моделирования.

Каждый узел представляет собой отдельную узкую таблицу.

Они делятся на типы: красный — узел (якорь или хаб), серый — соединение (связь или ссылка), белый — атрибут (атрибут или спутник).

Двойной штрих означает, что мы сохраняем историю изменений одного значения, одинарный штрих означает, что мы сохраняем только первое значение Преимущество такого подхода в том, что изменения модели данных в источнике не приводят к перестроению всего, что использует эти данные, в хранилище.

Добавляя новый атрибут, вы просто добавляете новую узкую таблицу, старые таблицы не изменяются.

Изменяя атрибут, вы просто меняете одну узкую таблицу, не затрагивая остальные.

Когда вы удаляете атрибут, вы ничего не делаете.

Простота управления поражает. Также при супернормализованной модели данных мы не храним лишнее: каждый атрибут хранится отдельно и записывается только в том случае, если его значение изменилось с момента последней загрузки.

Это может вызвать культурный шок у тех, кто впервые смотрит на хранилище.

Каждый раз, когда вы собираете очередной отчет, вам нужно объединить несколько десятков таблиц.

Это может показаться безумием, но Vertica отлично умеет присоединяться, поэтому сценарий работает отлично.

Как выглядела загрузка данных в 2013 году? На тот момент в нашем Git-репозитории было всего несколько скриптов, построенных на семи стандартных операциях.

Скрипты позволяли загружать данные в узкие планшеты в сверхнормальной форме.

У нас было много загрузок из разных исходных систем и скриптов расчета витрин или ежедневных отчетов, которые запускались после завершения всех загрузок.

Скрипты выглядели примерно так:

   

loaders = [] loaders.append(Process(target = elt, args = (

Теги: #Хранилища данных #Большие данные #большие данные #Инженерия данных #dwh #clickhouse #Vertica
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.