我的数据库中有大约100,000名艺术家/乐队。我希望能够跟踪每个乐队的视图,例如,如果我正在查看Pearl Jam指标,我希望能够在2012年1月1日看到他们看到10,000个观看次数,在1/2/2012他们看到了12,000次观看......等等。
捕获此数据的最佳方法是什么?我不是在寻找代码帮助,而是在寻找理论/建议。
我正在考虑做以下事情:
这是正确的思路吗?有什么建议吗?
答案 0 :(得分:2)
我是开源分析平台Countly的开发人员,希望与您分享我的经验。
为艺术家和地图插入每个视图的新行 - 每天减少这些结果肯定是一个解决方案(它实际上是旧分析解决方案已经使用的解决方案)但是您可以选择更好的方法。但是,这种方法需要使用面向文档的数据库,就像MongoDB一样。
当艺术家有视图时,您将对相关字段进行增量,如:
db.views.update({'artist_id': 1}, {
'$inc': {
"views": 1,
"2012.views": 1,
"2012.8.views": 1,
"2012.8.4.views": 1
}
})
您将在视图集中获取文档,如下所示;
{
"artist_id": 1,
"2012": {
"8": {
"4": {
"views": 1 /* today */
},
"views": 1 /* august */
},
"views": 1 /* 2012 */
},
"views": 1 /* all time */
}
此解决方案不需要批处理,实际上是实时的。如果您想查看8月份的所有统计信息,只需获取下面的结果,您就会看到8月份所有日期的数据加上8月份的总观看次数。
db.views.findOne({"artist_id": 1}, {"2012.8": 1})
或者,如果您只需要2012年的总观看次数;
db.views.findOne({"artist_id": 1}, {"2012.views": 1})
假设您正在使用LAMP堆栈,您可以查看MongoDB PHP driver。