数据库设计 – MongoDB存储大量度量/分析数据的方法

前端之家收集整理的这篇文章主要介绍了数据库设计 – MongoDB存储大量度量/分析数据的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在计划使用MongoDB来存储大量分析数据,如视图和点击.我不确定在MongoDB中构建文档的最佳方法是帮助查询和减少数据库大小.

我们需要再次记录一个pagename,客户端和操作类型.理想情况下,我们需要按年/月/日/小时级别的统计数据,我们不需要或关心每秒或分钟的观看次数.虽然这个文档结构看起来不错,我知道100个vistor会生成100个新的文档.

{ 
  "_id" : ObjectId( "4dabdef81a34961506040000" ),"pagename" : "Hello","action" : "view","client" : "client-name","time" : Date( "Mon Apr 18 07:49:28 2011" )
}

使用$inc还是Capped Collections是否有最佳做法?

解决方法

更新答案

在黑客壳中被黑客入侵:

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')
    };
}

根据您要跟踪的方面,您可以考虑添加更多集合(例如,以用户为中心的跟踪集合).希望有帮助.

也可以看看

Blogpost about Analytics Data

猜你在找的MongoDB相关文章