Квинтетная Модель Данных И Сотни Гигабайт Данных

Недавно мы протестировали подход, который мы называем КДМ , при работе с большими объемами данных — сотни гигабайт. В рамках задачи мы обработали 12–24 миллиона записей и сравнили производительность решения-квинтета с аналогичным функционалом в обычных таблицах.

Новых открытий мы не сделали, но подтвердили гипотезы, озвученные ранее: насколько универсальный конструктор в руках так называемого «чайника» проигрывает профессионально настроенной базе данных.

Мы тоже теперь знаем, что делать в такой ситуации — решение достаточно простое и надежное, и у нас есть опыт организации компромиссного решения для любого объема больших данных.



Квинтетная модель данных и сотни гигабайт данных

При разработке системы сверки отчетности нам потребовалось загрузить данные из одной из форм отчетности, которая содержит до 24 миллионов записей на каждую отчетную дату.

Там должны быть данные за 7 лет ежедневных расчетов.

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

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

Индексы остальных 26 полей данных в этой форме не используются.

Первое, что мы сделали, конечно же, создали в конструкторе необходимую структуру данных и загрузили туда несколько дат. Загрузка одной из самых маленьких дат занимает около 14 часов, что уже недопустимо долго: 12,5 миллионов записей по 27 атрибутов, помещенных в полмиллиарда записей по 5 полей с построением трех индексов, два из которых составные.

Общий объем этих данных на диске составляет чуть больше 18 ГБ.

Стоит отметить две особенности этой формы:
  1. Нормализовать практически невозможно, в отличие, например, от формы 110, рассмотренной в предыдущая публикация
  2. Не использует индексы на основе атрибутов записей — пользователю выгоднее подождать минуту, чем тратить деньги на индексы
Это, можно сказать, самый радикальный случай, который можно выбрать для сравнения.

В большинстве случаев разница в объёмах данных между QDM и обычной базой данных не столь существенна, если не сказать очень маленький .

Для сравнения, те же данные, загруженные в обычную таблицу реляционной базы данных, занимают 2,3 ГБ (в 8 раз меньше) с индексом по дате и загружаются менее чем за полчаса (в 28 раз быстрее).

В обоих случаях данные вставлялись прямо из файла кусками по 100 тысяч записей, без отключения индексов.

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

Нам нужно было определить предел объёма данных для хранения, которые мы впредь будем использовать обычную таблицу, а не наш конструктор.

Как мы и ожидали, работа с небольшими наборами данных, например, по отдельному аккаунту или клиенту, в дизайнере выглядит вполне комфортно (время отклика в пределах секунды), в отличие от таблицы без индексов, где приходится ждать ответ в течение нескольких минут. При этом основная задача приложения — массовая выборка и агрегирование данных в различных разделах — может занимать в дизайнере в разы больше времени.

Ниже приведены сводные результаты выборок, которые мы сделали для постепенно увеличивающегося объема агрегированных данных:

Количество записей Время выборки, с
Конструктор Таблица без индексов
1 0.16 56
5 0.23 55
50 1.86 53
600 2.35 56
5000 14.7 56
12000 125 56
100000 254 57
650000 2663 57
1000000 2314 57
5000000 9675 69
12500000 764 89
Там, где это было возможно, мы провели несколько измерений, сначала выбрав статистику и выбрав количество записей на основе маски номера счета.

Из таблицы и графика ниже видно, что агрегирование полного набора данных в течение дня занимает заметно меньше времени, чем выборка более 5% данных с помощью индекса.

Вот почему оптимизаторы запросов РСУБД игнорируют индекс в такой ситуации, в то время как наш сервисный механизм в данный момент лишен такой возможности.

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

Квинтетная модель данных и сотни гигабайт данных

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

было достигнуто.



Исследование показало, что количество записей в базе данных практически не влияет на скорость построения страниц, навигации и небольших выборок в модели данных «квинтет».

При объеме обрабатываемых данных до 10 000 записей (а это максимальный выбор сопутствующих данных для экземпляра любого субъекта хозяйствования в информационной системе) можно комфортно работать с базой данных объемом в сотни гигабайт и более.

Далее мы обучили наш плагин таблиц (описанный Здесь ) вызвать коннектор к произвольной базе данных, чтобы он прозрачно работал как с моделью данных «квинтет», так и с традиционными таблицами.

С точки зрения пользователя ему не важно, с каким источником данных он работает, главное, чтобы он мог выполнять важную для него работу в привычном интерфейсе, получая свои отчеты:

Квинтетная модель данных и сотни гигабайт данных

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



Так, мы можем использовать конструктор для небольших и средних таблиц, требующих интенсивного поиска и агрегации по произвольным атрибутам, а большие неиндексируемые объекты хранить в плоских традиционных таблицах, вызывать их из сторонних хранилищ или специализированных баз данных (Hadoop и другие).

NoSQL).

Конструктор лучше всего подходит для CRM-систем и подобных продуктов, где пользователь работает с одним клиентом, счетом или другим субъектом, а аналитические функции вынесены в отдельное специализированное хранилище.

Теги: #программирование #Анализ и проектирование систем #Бизнес-модели #sql #Идеальный код #QDM #квинтетная модель данных #IdeaV

Вместе с данным постом часто просматривают:

Автор Статьи


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

Dima Manisha

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