В проекте, над которым я сейчас работаю, у меня есть коллекция необработанных метрик, эти метрики о отслеживании сигналов:
Таблица: показатели
{timestamp: 1535875518111, project_id: 1, type: 'A', strength: 100},
{timestamp: 1535875528111, project_id: 2, type: 'B', strength: 80},
{timestamp: 1535875528101, project_id: 1, type: 'B', strength: 50}
Поскольку в таблице метрик в день буквально миллионы записей, кажется неэффективным запрашивать и объединять записи для извлечения результатов.
Я много читал о накоплениях данных за день / неделю / месяц, но я все еще не уверен, как я могу свернуть мою схему. Я хочу извлечь данные как:
С октября по ноябрь и для проекта с идентификатором 1, каков общий диапазон попаданий и 10 лучших типов?
Для типа А проекта с идентификатором 1, сколько было выполнено вхождений и какой максимальный диапазон?
Моя первая мысль сводила данные как:
{
day: 21,
month: 10,
year: 2018,
project_id: 1,
types: {
'A': {
hits: 100,
strengths: {
'100': 1,
'200': 2
}
},
'B': {
hits: 20,
strengths: {
'2': 1,
'5': 3
}
}
}
}
Вышеприведенная структура выглядит хорошо, но, поскольку диапазон типов растет, я думаю, что будет сложно запросить вложенные результаты. Кроме того, я не совсем уверен, как мне добавлять индексы для повышения производительности моих запросов.
Я действительно ищу любые предостережения или подсказки, чтобы разработать схему свертывания. База данных, которой я сейчас пользуюсь, - это RethinkDB, но я думаю, что те же принципы применимы и к общей схеме схемы.