加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 12:43:18 所属栏目:百科 来源:网络整理
导读:我们正在计划使用MongoDB来存储大量分析数据,如视图和点击.我不确定在MongoDB中构建文档的最佳方法是帮助查询和减少数据库大小. 我们需要再次记录一个pagename,客户端和操作类型.理想情况下,我们需要按年/月/日/小时级别的统计数据,我们不需要或关心每秒或分
我们正在计划使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读