在我目前正在从事的项目中,我有一些原始指标,这些指标与信号跟踪有关,如下所示:
表:指标
{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}
由于每天有数以百万计的指标表记录,因此查询和汇总记录以提取结果似乎效率低下。
我已经阅读了很多有关每天/每周/每月的数据汇总的信息,但是对于如何滚动架构仍然感到困惑。我想将数据提取为:
从10月到11月,对于ID为1的项目,总体命中范围是多少,排名前10位的类型是什么? 对于ID为1的项目A型,已经发生了多少次,最大范围是什么?
我的第一个想法是将数据滚动为:
{
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,但我认为相同的原则也适用于通用模式设计。