|
БД для объектов с разным количеством параметров
|
|||
---|---|---|---|
#18+
Уважаемые участники! Добрый день. Есть потребность сделать базу данных для системы по типу "умный дом". Устройства разные, у каждого может быть от 5 до 10 контроллируемых технологических параметров. Устройств пока до 10 штук, потом может быть больше. Сохранять значения параметров нужно, скажем, каждую минуту. В целом, темп поступления данных в базу как будто бы не очень большой, но на самом деле все не так просто, о чем ниже. Первое, что приходит в голову (если опустить детали) - это сделать две таблицы. Главная таблица, где для каждого сбора измерений от конкретного устройства есть запись с уникальным UUID. И вторая таблица, где для этого же UUID имеется некоторое число записей (5-10 по числу технологических параметров от устройства) с идентификатором типа параметра и самими данными в varchar, там в основном числа с двумя знаками после запятой и немного true/false, преобразовывать как потребуется можно уже потом, при выборке. В обоих таблицах, разумеется, не помешают и timestamp. Это схема простая и очевидная, но: берем калькулятор и получаем, что за год число записей от уже имеющихся устройств может перевалить за 30 миллионов. Особо быстрый поиск по всему накопленному массиву данных может быть и не нужен, в основном быстро нужно получать только последние значения, для WEB-страницы. Тут можно держать наготове вьюху, представление, или обнобляемую служебную таблицу и т.д. Но число записей в общем пугает. Нужен рабочий архив хотя бы за год, по которому можно строить графики величин по часам, дням, месяцам и прочее. Надеюсь, что здесь любая выборка "малой или средней сложности" будет происходить хотя бы за ~ десятки сукунд или менее. Есть вариант данные не клать в отдельные строки, а упаковать в типы "массив" и тогда раз в ~десять можно сократить общее число записей. Все данные хранить (как и в первом варианте) в виде массивов переменной длины из varchar. Общее число строк сократится (это плюс), сложности при выборке возрастут, и мне ведь еще в принципе не известно, как быстро будет все это работать с массивами. Скажите, пожалуйста - что на Ваш взгляд лучше? Первый вариант, второй, или посоветуете в принципе другой метод? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 12:32 |
|
БД для объектов с разным количеством параметров
|
|||
---|---|---|---|
#18+
используйте комбинацию типовых колонок (id устройства, время снятия данных и т.д.) + колонку с jsonb ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 14:28 |
|
БД для объектов с разным количеством параметров
|
|||
---|---|---|---|
#18+
D0KX, думал насчет чего то подобного, по типу пар "параметр-значение". А PG умеет работать с jsonb, как потом быть с выборками? Это ведь как-то не совсем к СУБД? P.S. Да, вижу, тип такой есть. Интересно, на практике удобно, быстро ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 14:32 |
|
БД для объектов с разным количеством параметров
|
|||
---|---|---|---|
#18+
D0KX, спасибо за совет. Мне определенно стоит подумать. Во всяком случае, что-то по типу: Код: plsql 1.
вполне дает то, что нужно пока. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2022, 16:44 |
|
БД для объектов с разным количеством параметров
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 06:03 |
|
БД для объектов с разным количеством параметров
|
|||
---|---|---|---|
#18+
Andi_WEB но: берем калькулятор и получаем, что за год число записей от уже имеющихся устройств может перевалить за 30 миллионов. В чем проблема для базы работать с 30м записей вида число / число / число Andi_WEB Особо быстрый поиск по всему накопленному массиву данных может быть и не нужен, в основном быстро нужно получать только последние значения, для WEB-страницы. Тут можно держать наготове вьюху, представление, или обнобляемую служебную таблицу и т.д. То есть не надо работать с 30м записей? В чем тогда сомнения и зачем вьюхи? Andi_WEB данными в varchar, там в основном числа с двумя знаками после запятой и немного true/false, преобразовывать как потребуется можно уже потом, при выборке Разработка в стиле garbage in - garbage out ? Что бы посчитать количество trueв придется вычитывать буквально все данные, "преобразовывать" и только потом считать. Andi_WEB Но число записей в общем пугает. Нужен рабочий архив хотя бы за год, по которому можно строить графики величин по часам, дням, месяцам и прочее. Надеюсь, что здесь любая выборка "малой или средней сложности" будет происходить хотя бы за ~ десятки сукунд или менее. Сделайте прототип, заполните тестом и погоняйте, что бы получить представление. Andi_WEB Есть вариант данные не клать в отдельные строки, а упаковать в типы "массив" и тогда раз в ~десять можно сократить общее число записей. Вам не не выбирать надо, а только хранить данные? Тогда да. Упаковывайте. Распаковывать то не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2022, 06:24 |
|
|
start [/forum/topic.php?fid=53&msg=40126189&tid=1993709]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 131ms |
0 / 0 |