Tom*_*Tom 15 statistics analytics database-design mongodb
我们计划使用MongoDB存储大量分析数据,例如视图和点击.我不确定在MongoDB中构建文档以帮助查询和减少数据库大小的最佳方法.
我们需要再次记录页面名称,客户端和操作类型的操作.理想情况下,我们需要下降年/月/日/小时水平的统计数据,我们不需要或关心每秒或每分钟的观看次数.虽然这个文档结构看起来还不错,但我知道100个命令会生成100个新文档.
{
"_id" : ObjectId( "4dabdef81a34961506040000" ),
"pagename" : "Hello",
"action" : "view",
"client" : "client-name",
"time" : Date( "Mon Apr 18 07:49:28 2011" )
}
Run Code Online (Sandbox Code Playgroud)
有没有最佳实践方法,使用$ inc或Capped Collections?
Mat*_*att 16
更新的答案
在mongo shell中被黑客攻击:
use pagestats;
// a little helper function
var pagePerHour = function(pagename) {
d = new Date();
return {
page : pagename,
year: d.getUTCFullYear(),
month: d.getUTCMonth(),
day : d.getUTCDate(),
hour: d.getUTCHours(),
}
}
// a pageview happened
db.pagestats.update(
pagePerHour('Hello'),
{ $inc : { views : 1 }},
true ); //we want to upsert
// somebody tweeted our page twice!
db.pagestats.update(
pagePerHour('Hello'),
{ $inc : { tweets : 2 }},
true ); //we want to upsert
db.pagestats.find();
// { "_id" : ObjectId("4dafe88a02662f38b4a20193"),
// "year" : 2011, "day" : 21, "hour" : 8, "month" : 3,
// "page" : "Hello",
// "tweets" : 2, "views" : 1 }
// 24 hour summary 'Hello' on 2011-4-21
for(i = 0; i < 24; i++) {
//careful: days (1-31), month (0-11) and hours (0-23)
stats = db.pagestats.findOne({ page: 'Hello', year: 2011, month: 3, day : 21, hour : i})
if(stats) {
print(i + ': ' + stats.views + ' views')
} else {
print(i + ': no hits')
};
}
Run Code Online (Sandbox Code Playgroud)
根据您要跟踪的方面,您可以考虑添加更多集合(例如,用于用户中心跟踪的集合).希望有所帮助.
也可以看看
| 归档时间: |
|
| 查看次数: |
4065 次 |
| 最近记录: |