20-30, куда будет сыпаться относительно много записей, причём около 3/4 колонок в каждой записи будет заполнено нулями. Как оптимизировать подобное в плане экономии места и памяти?
Записи это временные ряды?
А какой цэлевой смысл в полях, которые будут заполнены нулями?
Там телеметрия. Смысл в неподключенном (пока или вообще) оборудовании.
То есть это не числовое значение "0", а отсутствие данных. Такие вещи в SQL-базах принято обозначать значением Null. Заодно оно займёт 1 бит на каждое значение на диске...
А можно чтобы даже бита не занимало? Чтобы фактически были записаны только существующие значения, Индексы по этим колонкам вроде не нужны.
Понял, обойдёмся NULLами) А там может и timescale чем поможет.
Timescaledb пожмёт лучше чем один бит на каждый null
лишь бы время выборки не увеличилось от такого пожима.
Обычно даже уменьшает, ибо основное время это чтение дисков, которое дороже чем время на декодирование/разжатие
Потом приду с вопросом как последние полгода держать полностью в памяти))
Насколько я понял — timescale ещё и с потерями жмёт.
Регулярно греть разве что (пока что только так).
Что значит с потерями? значения при чтении изменятся?
Насколько я понял — да, hypertable кажэтся в обязательном порядке усредняет значения к указанным интэрвалам. Но, возможно, это и необязательно.
https://github.com/timescale/timescaledb/issues/2529 тут всё сказано по этому поводу. Краткий ответ - нет, но если вы сами подрежите флоты, то они сожмутся лучше
Не изменятся, см. выше
Обсуждают сегодня