powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура для хранения большого объема исторических данных
12 сообщений из 12, страница 1 из 1
Структура для хранения большого объема исторических данных
    #39297778
SelectIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня!
Стоит задача оптимизации хранения истории значений по параметрам объектов.
Т.е. есть таблица объектов(Id, Name), параметров(Id, Name, ObjId), всех значений параметров(Id, ParameterId, ChangeTime, Value) и таблица с текущими(актуальными) значениями (ParameterId, ParameterValueId).
Последняя таблица нужна для быстрого отображения текущих значений.
А вот с выборкой значений за какой-то период беда. Также необходимо строить отчеты, усреднять, анализировать и т.д.
Прирост данных в таблицу со значениями примерно 2 млн строк в неделю. В будущем это значение будет только увеличиваться. сложно прогнозировать до какого значения, но полагаю 2 млн в сутки это реально.

Собственно вопрос: как лучше организовать хранение такого рода данных. СУБД MSSQL Server
Есть следующие идеи:
1. под каждый объект создавать отдельную таблицу и писать значения туда. Число объектов думаю будет порядка 100 000;
2. значения за последние сутки(т.к. в 50% случаях используются именно эти данные) хранить в отдельной таблице;
3. Разбивать данные по месяцам либо даже неделям и хранить их в отдельных таблицах.

Дайте совет у кого был такого рода опыт.

Спасибо.
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39297890
soulsurfer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39297939
buven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
soulsurfer,

THIS TOPIC APPLIES TO: SQL Server (starting with 2016) Azure SQL Database
Кто то в этом году решился на переход на 2016 SQL Server?...)

SelectIgor,
Здесь сильно пахнет OLAP...
И может быть пойти от конечной задачи?
SelectIgorТакже необходимо строить отчеты, усреднять, анализировать и т.д.
Считать нужные агрегаты и складывать их в витрины. Отчеты строить на основании витрин. Вполне может подойти, если задним числом данные не правятся часто.
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39298042
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SelectIgor,

1.этот вариант мне категорически не нравится
2.имхо, это излишне, если 3
3.я отстал от жизни MSSQL, думаю, там должно быть партицирование, например, по месяцам.
Сам не пробовал, есть ли там резервное сохранение отдельных партиций?
А то таблица большая, с бакапами могут быть сложности.

У нас есть АСУ, где каждый день сваливается в отдельную таблицу с именем tYYMMDD, автоматом строятся вьюхи по месяцам - LYYMM.
Мне не сильно нравится, данные для анализа за период приходится выбирать ХП, а внурти ХП динамически формировать запросы.
Объемы много меньше Ваших, поэтому временные характеристики терпимые, до 10 сек месяц.
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39298129
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buven Здесь сильно пахнет OLAP+1 http://www.sql.ru/forum/olap-dwh

>1. под каждый объект создавать отдельную таблицу и писать значения туда.
Плохо

2 и 3 на самом деле одно и тоже - партиции (секционирование). Если редакция EE то пользоватся встроенным в MS SQL плюс в EE есть другие плюшки в виде columnstore, page compression чтобы уменьшить объем сырых данных
если SE то ваш выбор partitioned views
https://technet.microsoft.com/en-us/library/ms190019(v=sql.105).aspx
Это для хранения сырых данных.

Дальше из вашего EAV надо создать нормальные таблицы для отчетов. Индексные вьюхи скорее всего создать не получится.
Либо поднимайте analysis services.
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39299029
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SelectIgor,
2 млн в сутки это нереально, это много.
у вас столько не будет.
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39299030
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SelectIgor,


если это только хранение и аналитика, то лучше что-то похитрее mssql брать, типа vertical, или что-то подобное.
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39299033
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SelectIgor,

сколько у вас параметров?
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39300131
SelectIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня! Спасибо за внимание к моей задаче.

soulsurferTemporal tables - https://msdn.microsoft.com/en-us/library/dn935015.aspx ?
Интересная вещь, но в чистом виде задачу не решает

DirksDRSelectIgor,

1.этот вариант мне категорически не нравится
2.имхо, это излишне, если 3
3.я отстал от жизни MSSQL, думаю, там должно быть партицирование, например, по месяцам.
Сам не пробовал, есть ли там резервное сохранение отдельных партиций?
А то таблица большая, с бакапами могут быть сложности.

У нас есть АСУ, где каждый день сваливается в отдельную таблицу с именем tYYMMDD, автоматом строятся вьюхи по месяцам - LYYMM.
Мне не сильно нравится, данные для анализа за период приходится выбирать ХП, а внурти ХП динамически формировать запросы.
Объемы много меньше Ваших, поэтому временные характеристики терпимые, до 10 сек месяц.

Почему запросы в хп динамически формируются? Если к примеру сделать партицированную вьюху, то как мне видится оптимизатор сам заставит сервак обращаться к нужным таблицам.

SERG1257buven Здесь сильно пахнет OLAP+1 http://www.sql.ru/forum/olap-dwh

>1. под каждый объект создавать отдельную таблицу и писать значения туда.
Плохо

2 и 3 на самом деле одно и тоже - партиции (секционирование). Если редакция EE то пользоватся встроенным в MS SQL плюс в EE есть другие плюшки в виде columnstore, page compression чтобы уменьшить объем сырых данных
если SE то ваш выбор partitioned views
https://technet.microsoft.com/en-us/library/ms190019(v=sql.105).aspx
Это для хранения сырых данных.

Дальше из вашего EAV надо создать нормальные таблицы для отчетов. Индексные вьюхи скорее всего создать не получится.
Либо поднимайте analysis services.

Имею standart edition. Эксперименты провожу на express.
Решение задачи видится в партицировании по месяцам. Т.к. сервак не EE, то собственно вопрос есть ли хорошие практики по автоматизации всего этого дела.
Решение вижу следующим:
1. Оставляю таблицу с актуальными(текущими) значениями и создаю таблиц на лет 10 вперед с нужными ограничениями по дате(т.е. если таблица за август, то другие данные не вставить), первичный ключ сделать составным (Код параметра, дата);
2. Создать партицированное представление с UNION ALL;
3. Тут вопрос. Что лучше написать хп, которая смотря на дату будет кидать в нужную таблицу(а может быть и создавать таблицу если ее нет и перестраивать вьюху) либо триггер на таблицу с актуальными данными(т.е. после вставки нового значения старое переносить а архив)?
4. Обращение за архивными данными делать через вьюху;

Вроде как-то так. Сейчас еще про olap кубы копаю. Никогда с ними не работал.

Alexander2SelectIgor,

сколько у вас параметров?

Данное значение варьируется от объекта к объекту. Параметров мб много порядка 10 т. на объекте, но интенсивность обновления значений разная.

Спасибо!
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39300465
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SelectIgor есть ли хорошие практики по автоматизации всего этого делаНе использовать EAV для запросов. Вообще.
Для запросов подходит схема типа звезда или снежинка.
EAV только как стейджинговая таблица, на тот случай если вам надо перекроить отчетную схему.
Какой должна быть отчетная схема вопрос к вам. Анализируйте свои отчеты и запросы.
Кстати ваша идея 1 - о таблице (или набора таблиц) для объектов вполне может иметь смысл.

Партицирование нужно не для ускорения запросов (partition pruning это приятный бонус), а для упрощения администрирования (выполнять не полный бакап, а только нужных файловых групп; данные не удалять delete, а усекать партицию truncate; долго лить данные в таблицу, а затем мгновенно сделать их доступными через alter view)

SelectIgor Сейчас еще про olap кубы копаю. Никогда с ними не работал.OLAP по сути тоже самое что и отчетная схема - некие промежуточные объекты, к которым обращаются пользователи с запросами и отчетами, и которое обновляется из источника данных (у вас EAV).
Из минусов: в дополнение к tsql надо будет копатся еще и с mdx и xmla,
из плюсов: готовый софт BI (правда платный и дорогой)

SelectIgor Параметров мб много порядка 10 т. на объектеНикто не будет запрашивать все параметры (это просто неудобно человеку). Наверняка не все йогурты одинаково полезны: есть набор важных параметров, есть не столь важные параметры, а есть разное, чтобы было.
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39300679
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SelectIgor,

авторавторсколько у вас параметров?

Данное значение варьируется от объекта к объекту. Параметров мб много порядка 10 т. на объекте, но интенсивность обновления значений разная.

Вероятно, это что-то типа: параметры химических элементов, соединений, физические свойства и так далее, .... тогда понятно.

Делал когда-то лет 13 назад что-то подобное, добился извлечения из базы (EAV, между прочим) от 20 сек до 2 минут в экспортируемую кросс-таблицу. Вытаскивал "цвет огурцов, скорость, вес, %.... любой зоопарк индивидуальных параметров в одну кучу - итоговую.

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

Пральна тут говорят, все 10 т параметров никакому аналитику нафиг не сдалось, надо делать интерактивность выбора желаемых параметров.
...
Рейтинг: 0 / 0
Структура для хранения большого объема исторических данных
    #39308198
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Data Vault, Anchor
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура для хранения большого объема исторических данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]