|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
Данных мало. всего 2700 строк в результирующей таблице. Первый запрос - чисто посмотреть на время выполнения селекта из таблицы с одним столбцом, там в 4 раза больше строк. Последний - селект из таблицы с четырьмя столбцами. Код: SQL 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
simple in -----------------------------------------------------
(11088 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 12 ms.
joins -----------------------------------------------------
(2772 row(s) affected)
SQL Server Execution Times:
CPU time = 31 ms, elapsed time = 33 ms.
pivot with fake aggr -----------------------------------------------------
(2772 row(s) affected)
SQL Server Execution Times:
CPU time = 16 ms, elapsed time = 11 ms.
case with fake aggr -----------------------------------------------------
(2772 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 12 ms.
optimal -----------------------------------------------------
(2773 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 6 ms. Получается, нет ничего быстрее таблицы с количеством столбцов, соответствующим количеству замеров в группе. Но case с фиктивными аггрегациями тоже неплох. А pivot тоже подгружает ЦП, но не так сильно, как join.... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2022, 10:37 |
|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
Есть несколько источников, с которых с разной периодичностью берутся показатели. Показатель, в общем-то, один, просто число. Источники разных типов. 1. Простой. Один замер - один показатель. 2. Двойной. Один замер - два показателя. 3. Сложный. Один замер - от 4 до 20 показателей. Как их хранить? На данный момент есть источники с 1, 2 и 4 показателями. Все хранятся в одной таблице, каждый со своим айдишником (для этого и был нужен пивот). Но вот предстоит добавить источник с 13 показателями. Хочется создать для него таблицу, но это как-то неправильно. Но и пихать его в общую таблицу как-то некомильфо, потому что выборки, если будут использовать этот источник, скорее всего, все 13 показателей и возьмут. И будут их разворачивать пивотом. Плюс еще непонятно, как формировать выборки по желанию пользователя. Тут или динамический код, или трехзвенка. Вообще жесть. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2022, 16:34 |
|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
Есть несколько источников, с которых с разной периодичностью берутся показатели. Показатель, в общем-то, один, просто число. Источники разных типов. 1. Простой. Один замер - один показатель. 2. Двойной. Один замер - два показателя. 3. Сложный. Один замер - от 4 до 20 показателей. Как их хранить? На данный момент есть источники с 1, 2 и 4 показателями. Все хранятся в одной таблице, каждый со своим айдишником (для этого и был нужен пивот). Но вот предстоит добавить источник с 13 показателями. Хочется создать для него таблицу, но это как-то неправильно. Но и пихать его в общую таблицу как-то некомильфо, потому что выборки, если будут использовать этот источник, скорее всего, все 13 показателей и возьмут. И будут их разворачивать пивотом. Плюс еще непонятно, как формировать выборки по желанию пользователя. Тут или динамический код, или трехзвенка. Вообще жесть. Это понятно, что в единую БД. Сколько столбцов делать в таблице? Все в один столбец, а потом разворачивать пивотом (или кейсами), или все-таки для групп замеров, которые делаются единомоментно, и будут выбираться потом все скопом, делать много столбцов? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2022, 16:49 |
|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
Есть несколько источников, с которых с разной периодичностью берутся показатели. Показатель, в общем-то, один, просто число. Источники разных типов. 1. Простой. Один замер - один показатель. 2. Двойной. Один замер - два показателя. 3. Сложный. Один замер - от 4 до 20 показателей. Как их хранить? На данный момент есть источники с 1, 2 и 4 показателями. Все хранятся в одной таблице, каждый со своим айдишником (для этого и был нужен пивот). Но вот предстоит добавить источник с 13 показателями. Хочется создать для него таблицу, но это как-то неправильно. Но и пихать его в общую таблицу как-то некомильфо, потому что выборки, если будут использовать этот источник, скорее всего, все 13 показателей и возьмут. И будут их разворачивать пивотом. Плюс еще непонятно, как формировать выборки по желанию пользователя. Тут или динамический код, или трехзвенка. Вообще жесть. Это понятно, что в единую БД. Сколько столбцов делать в таблице? Все в один столбец, а потом разворачивать пивотом (или кейсами), или все-таки для групп замеров, которые делаются единомоментно, и будут выбираться потом все скопом, делать много столбцов? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2022, 18:23 |
|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
Продолжайте жрать кактус ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2022, 13:33 |
|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
Продолжайте жрать кактус Код: SQL 1.
У тебя нет мысли, что лучше все-таки сделать таблицу с 20-ю столбцами, чем хранить все в одном столбце? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2022, 14:51 |
|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2022, 14:52 |
|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
Я бы подумал таблицу для исходных данных и таблицу для сводных, наподобие регистра. В принципе, сделать три таблицы, Первая это список показателей. Вторая это измерение, но без чисел Третья это само измерение, с типом показателя(первая таблица), номером измерения(вторая таблица) и измеренным числом Тогда одно измерение будет одна запись во второй таблице и сколько там измерений в третьей. ... |
|||
:
Изменено: 21.07.2022, 14:58 - IT-Христ
Нравится:
Не нравится:
|
|||
21.07.2022, 14:57 |
|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
Есть несколько источников, с которых с разной периодичностью берутся показатели. Показатель, в общем-то, один, просто число. Источники разных типов. 1. Простой. Один замер - один показатель. 2. Двойной. Один замер - два показателя. 3. Сложный. Один замер - от 4 до 20 показателей. Как их хранить? На данный момент есть источники с 1, 2 и 4 показателями. Все хранятся в одной таблице, каждый со своим айдишником (для этого и был нужен пивот). Но вот предстоит добавить источник с 13 показателями. Хочется создать для него таблицу, но это как-то неправильно. Но и пихать его в общую таблицу как-то некомильфо, потому что выборки, если будут использовать этот источник, скорее всего, все 13 показателей и возьмут. И будут их разворачивать пивотом. Плюс еще непонятно, как формировать выборки по желанию пользователя. Тут или динамический код, или трехзвенка. Вообще жесть. Это понятно, что в единую БД. Сколько столбцов делать в таблице? Все в один столбец, а потом разворачивать пивотом (или кейсами), или все-таки для групп замеров, которые делаются единомоментно, и будут выбираться потом все скопом, делать много столбцов? id bigint identity primary key, dt datetime default getdate(), counter_id int/smallint value float/numeric думаю в эту структуру набор измерений можно запихать весь ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2022, 17:46 |
|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
Ну и.... наверное для этой таблицы можно въебенить колоночный кластерный индекс. create table measures ( id bigint not null identity, -- айди замера counter_id int not null, -- айди прибора измерения, если приборов несколько типа и напряжение и ток, то у этого прибора два counter_id dt datetime not null default getdate(), val numeric(10,4) not null ) create columnstore clustered index ix_measures on measures здесь в куче этой шляпы колоночный кластерный индекс хорошо влазит - быстрая агрегация будет да и каждое поле проиндексировано, и места мизер будет на диске - очень высокая компрессия. колоночные индексы апдейты не любят, а инсерты отлично переносят, а селекты вашпе бонба, и лярды записей будут вылетать ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2022, 17:51 |
|
Что делать с кучей данных из разных источников?
|
|||
---|---|---|---|
#18+
Продолжайте жрать кактус Код: SQL 1.
У тебя нет мысли, что лучше все-таки сделать таблицу с 20-ю столбцами, чем хранить все в одном столбце? Вы же упорно пытаетесь оптимизировать работу безграмотно построенной базы. Лучше один раз напрячься и переделать базу, чем годами тащить унаследованные ошибки проектирования ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2022, 18:41 |
|
|
start [/forum/topic.php?fid=17&msg=95350&tid=2996]: |
0ms |
get settings: |
13ms |
get forum list: |
9ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
784ms |
get tp. blocked users: |
2ms |
others: | 21ms |
total: | 887ms |
0 / 0 |