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
Обсуждают сегодня