Исследование вариантов схемы данных будет неполным без рассмотрения вопросов производительности. На момент принятия решения у меня не было данных для тестирования производительности – пришлось их генерировать, в настоящий момент – программа работает три года, накопилось достаточно информации, поэтому приведу факты по реальной базе данных:
Показатель | Модель А, таблица TabelFact |
Модель Б, таблица TabelRow |
Число строк в таблице | 5 млн. | 300 тыс. |
Время выполнения запроса на получение деталей одного табеля | 30ms | 5ms |
Время на изменение значения одного факта | 12ms | 2ms |
Время расчета OLAP-куба | 1мин. | 4мин. |
Таблица 1. Характеристики базы данных табельного учета
Таблица TabelFact создана и рассчитана специально для настоящего исследования, в реальной базе ее нет. При развороте должно было получиться примерно 300*30 –9 млн. строк, но как уже говорилось – примерно половина из них пустые (нулевые). Заполнение таблицы на сервере заняло 5 минут. Резервная копия базы возросла при этом с 300 до 500 Мб.
Разница в скорости выполнения запросов учетной системы вполне предсказуема и определяется в основном количеством записей в таблицах.
Описание структуры OLAP-куба выходит за рамки обсуждаемой темы, важно соотношение времени его расчета для разных моделей.
Осталось выяснить, насколько эти показатели соответствуют характеру требований производительности: