|
|
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
Доброго дня! Стоит задача оптимизации хранения истории значений по параметрам объектов. Т.е. есть таблица объектов(Id, Name), параметров(Id, Name, ObjId), всех значений параметров(Id, ParameterId, ChangeTime, Value) и таблица с текущими(актуальными) значениями (ParameterId, ParameterValueId). Последняя таблица нужна для быстрого отображения текущих значений. А вот с выборкой значений за какой-то период беда. Также необходимо строить отчеты, усреднять, анализировать и т.д. Прирост данных в таблицу со значениями примерно 2 млн строк в неделю. В будущем это значение будет только увеличиваться. сложно прогнозировать до какого значения, но полагаю 2 млн в сутки это реально. Собственно вопрос: как лучше организовать хранение такого рода данных. СУБД MSSQL Server Есть следующие идеи: 1. под каждый объект создавать отдельную таблицу и писать значения туда. Число объектов думаю будет порядка 100 000; 2. значения за последние сутки(т.к. в 50% случаях используются именно эти данные) хранить в отдельной таблице; 3. Разбивать данные по месяцам либо даже неделям и хранить их в отдельных таблицах. Дайте совет у кого был такого рода опыт. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2016, 13:02 |
|
||
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
Temporal tables - https://msdn.microsoft.com/en-us/library/dn935015.aspx ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2016, 14:24 |
|
||
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
soulsurfer, THIS TOPIC APPLIES TO: SQL Server (starting with 2016) Azure SQL Database Кто то в этом году решился на переход на 2016 SQL Server?...) SelectIgor, Здесь сильно пахнет OLAP... И может быть пойти от конечной задачи? SelectIgorТакже необходимо строить отчеты, усреднять, анализировать и т.д. Считать нужные агрегаты и складывать их в витрины. Отчеты строить на основании витрин. Вполне может подойти, если задним числом данные не правятся часто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2016, 14:56 |
|
||
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
SelectIgor, 1.этот вариант мне категорически не нравится 2.имхо, это излишне, если 3 3.я отстал от жизни MSSQL, думаю, там должно быть партицирование, например, по месяцам. Сам не пробовал, есть ли там резервное сохранение отдельных партиций? А то таблица большая, с бакапами могут быть сложности. У нас есть АСУ, где каждый день сваливается в отдельную таблицу с именем tYYMMDD, автоматом строятся вьюхи по месяцам - LYYMM. Мне не сильно нравится, данные для анализа за период приходится выбирать ХП, а внурти ХП динамически формировать запросы. Объемы много меньше Ваших, поэтому временные характеристики терпимые, до 10 сек месяц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2016, 16:05 |
|
||
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2016, 17:23 |
|
||
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
SelectIgor, 2 млн в сутки это нереально, это много. у вас столько не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2016, 19:11 |
|
||
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
SelectIgor, если это только хранение и аналитика, то лучше что-то похитрее mssql брать, типа vertical, или что-то подобное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2016, 19:15 |
|
||
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
SelectIgor, сколько у вас параметров? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2016, 19:36 |
|
||
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
Доброго дня! Спасибо за внимание к моей задаче. 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 т. на объекте, но интенсивность обновления значений разная. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2016, 11:45 |
|
||
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
SelectIgor есть ли хорошие практики по автоматизации всего этого делаНе использовать EAV для запросов. Вообще. Для запросов подходит схема типа звезда или снежинка. EAV только как стейджинговая таблица, на тот случай если вам надо перекроить отчетную схему. Какой должна быть отчетная схема вопрос к вам. Анализируйте свои отчеты и запросы. Кстати ваша идея 1 - о таблице (или набора таблиц) для объектов вполне может иметь смысл. Партицирование нужно не для ускорения запросов (partition pruning это приятный бонус), а для упрощения администрирования (выполнять не полный бакап, а только нужных файловых групп; данные не удалять delete, а усекать партицию truncate; долго лить данные в таблицу, а затем мгновенно сделать их доступными через alter view) SelectIgor Сейчас еще про olap кубы копаю. Никогда с ними не работал.OLAP по сути тоже самое что и отчетная схема - некие промежуточные объекты, к которым обращаются пользователи с запросами и отчетами, и которое обновляется из источника данных (у вас EAV). Из минусов: в дополнение к tsql надо будет копатся еще и с mdx и xmla, из плюсов: готовый софт BI (правда платный и дорогой) SelectIgor Параметров мб много порядка 10 т. на объектеНикто не будет запрашивать все параметры (это просто неудобно человеку). Наверняка не все йогурты одинаково полезны: есть набор важных параметров, есть не столь важные параметры, а есть разное, чтобы было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2016, 17:11 |
|
||
|
Структура для хранения большого объема исторических данных
|
|||
|---|---|---|---|
|
#18+
SelectIgor, авторавторсколько у вас параметров? Данное значение варьируется от объекта к объекту. Параметров мб много порядка 10 т. на объекте, но интенсивность обновления значений разная. Вероятно, это что-то типа: параметры химических элементов, соединений, физические свойства и так далее, .... тогда понятно. Делал когда-то лет 13 назад что-то подобное, добился извлечения из базы (EAV, между прочим) от 20 сек до 2 минут в экспортируемую кросс-таблицу. Вытаскивал "цвет огурцов, скорость, вес, %.... любой зоопарк индивидуальных параметров в одну кучу - итоговую. Советую сделать иерархическую систематизацию параметров, типа группы, "семейства" и т.п. для удобства формирования запроса к базе. Можно псевдоEAV сборки для хранения сделать по этим семействам. Пральна тут говорят, все 10 т параметров никакому аналитику нафиг не сдалось, надо делать интерактивность выбора желаемых параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2016, 22:05 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39299033&tid=1540284]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 501ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...