room_id может быть много device_id
Либо хранить словарь device_id - room_id
Либо хранить это все в одной таблице ?
device_id = 1 млн
room_id = 1 тыс
Запросы к бд это чаще всего получить либо метрики по одному device_id либо посомтреть на метрики всех из room_id
И второй вопрос: на сколько хорошо будет сжиматься колонка с room_id если они идут в разнобой ?
сделайте order by room_id, device_id, timestamp ( + опционально partition by какая-нибудь date_function(timestamp)) room_id будут лежать рядом и сожмутся хорошо а если device_id всегда в одной комнате, то вообще будет идеально
время в запросе учавствует? сдается мне время главнее чем room_id , device_id
ORDER BY (room_id, device_id, timestamp)
я бы время раньше поставил потом room_id потом device_id и PARTITITION BY toYYYYMM(timestamp) сделал
зачем? это же убьет фильтрацию по всем полям, кроме timestamp потому что room_id и device_id станут рандомно разложены по колонкам, и where room_id будет сканить всю таблицу
будет сканить кусок таблицы за заданный timestamp интервал мне бы все таки хотелось услышать от автора , есть у него там время или нет в запросах и есть ли запросы когда по диапозону времени для всех комнат и девайсов аггрегация идет
да время участвует, это по сути мониторинг устройств
ну тогда IMHO сначала читаем по времени... потом уже фильтруем по room_id и device_id так что если время есть всегда, я бы его вперед выставил, но тут вот люди другое советуют
или попробуйте построить две тестовые таблицы и заюзайте ваши запросы на небольшом наборе данных. через explain и query_log посмотрите, какая версия меньше сканит на ваших данных.
если предполагается хранить триллиопы стиок то делают отдельную таблицу metric, device, room
Обсуждают сегодня