MongoDB:设计统计仪表板模式
我正在为统计仪表板设计一个数据库,数据将从我的主系统聚合并保存在Mongo中 我正试图找到建立数据库模型的最佳方法,我遇到的问题是用户可以根据不同的标准(如时间范围、年龄组、性别)过滤图表 这篇文章对于时间范围很有帮助,但我不知道如何将所有过滤器混合在一起 例如 生成每个产品的MongoDB:设计统计仪表板模式,mongodb,database,Mongodb,Database,我正在为统计仪表板设计一个数据库,数据将从我的主系统聚合并保存在Mongo中 我正试图找到建立数据库模型的最佳方法,我遇到的问题是用户可以根据不同的标准(如时间范围、年龄组、性别)过滤图表 这篇文章对于时间范围很有帮助,但我不知道如何将所有过滤器混合在一起 例如 生成每个产品的总页面浏览量图,mongo db记录应类似于: { timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"), type: “page_views”, produ
总页面浏览量
图,mongo 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
}
}
},
}
}
我看到的问题是,如果用户将(年龄范围、年龄组和性别)混合在一起,您希望存储聚合数据。在已经聚合的数据中添加搜索条件从根本上说是复杂的。您需要在原始数据和聚合数据之间进行权衡
- 更多的原始数据意味着更容易混合和匹配不同的筛选条件,但也可能会降低运行速度
- 更多的聚合数据意味着您需要预先定义可以过滤的标准
在某些时候,您可能需要考虑使用面向时间序列的数据库,例如,EndoxDB、Splunk或类似的。此类数据库针对存储和索引面向日志的原始数据进行了优化。
除了MongoDB之外,您是否对其他数据库开放?有一类时间序列数据库在聚合查询中表现出色,这意味着您只保存原始数据,其余的由数据库来完成。不存储预计算的聚合的另一个好处是,您可以沿途更改原始数据,例如更新/修订,并查看聚合反映的数据是否一致。@SergeiRodionov感谢您的回复。是的,我是开放的,但不确定哪一个是好的选择,因为稳定性是这里的一个关键。XDB看起来很有希望,但不确定在生产环境的这个阶段使用它是否明智,因为该项目仍然相对较新,尚未通过alpha,更喜欢开源解决方案,有什么建议吗?基于HBase的系统:OpenTSDB,Bosun(在OpenTSDB之上)和ATSD。前两个是自由和开放源码软件。披露:我为开发ATSD的公司工作。感谢您的回复@SergeiRodionov,我会查看它们