我正在设计统计仪表板数据库,数据将从我的主系统汇总并保存在Mongo中。MongoDB:设计统计仪表板模式
我试图找到我的数据库模型的最佳方式,我遇到的问题是,用户可以基于像(时间范围,年龄,性别)
此不同的标准筛选图文章是非常有用的时间范围,但我很困惑如何将所有的过滤器混合在一起。
http://blog.mongodb.org/post/65517193370/schema-design-for-time-series-data-in-mongodb
例如
生成Total page views per product
图,蒙戈DB记录应类似于:
{
timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),
type: “page_views”,
product_id: 1550
values: {
0: { 0: 999999, 1: 999999, …, 59: 1000000 },
1: { 0: 2000000, 1: 2000000, …, 59: 1000000 },
…,
58: { 0: 1600000, 1: 1200000, …, 59: 1100000 },
59: { 0: 1300000, 1: 1400000, …, 59: 1500000 }
}
}
这会工作得很好,如果用户只能过滤时间范围,但如果用户将其与年龄组或性别混合,则该如何进行组织
{
timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),
type: “page_views”,
product_id: 1550
values: {
0: {
0: {
total: 999999,
age_group: {
teenagers: 4032932,
adults: 432942,
...
},
gender: {
male: 4239423,
female: 4342343
}
},
1: {
total: 999999,
age_group: {
teenagers: 4032932,
adults: 432942,
...
},
gender: {
male: 4239423,
female: 4342343
}
},
....
59: {
total: 999999,
age_group: {
teenagers: 4032932,
adults: 432942,
...
},
gender: {
male: 4239423,
female: 4342343
}
}
},
....
59: {
0: {
total: 999999,
age_group: {
teenagers: 4032932,
adults: 432942,
...
},
gender: {
male: 4239423,
female: 4342343
}
},
1: {
total: 999999,
age_group: {
teenagers: 4032932,
adults: 432942,
...
},
gender: {
male: 4239423,
female: 4342343
}
},
....
59: {
total: 999999,
age_group: {
teenagers: 4032932,
adults: 432942,
...
},
gender: {
male: 4239423,
female: 4342343
}
}
},
}
}
的问题我可以用这个看,是如果用户搭配(年龄范围,年龄和性别)一起
您是否打开MongoDB以外的其他数据库?有一类时间序列数据库https://en.wikipedia.org/wiki/Time_series_database,这与聚合查询相当有效,这意味着您只能保存原始数据,并让数据库完成剩下的工作。不存储预先计算的聚合的附加好处是您可以在路上更改原始数据,例如,更新/修改,并看到您的总量反映它没有任何不一致。 –
@SergeiRodionov感谢您的回复。是的,我是开放的,但不知道哪一个将是一个不错的选择,因为稳定性是一个关键这里InfluxDB看起来很有前途,但不确定在生产环境中的这个阶段使用它是明智的,因为该项目还是比较新的并且没有通过alpha但是,宁愿开源解决方案,任何建议? – trrrrrrm
基于HBase的系统:OpenTSDB,Bosun(OpenTSDB之上)和ATSD。前两个是FOSS。披露:我为开发ATSD的公司工作。 –