mongodb存list_使用MongoDB存储日志数据

Web服务器日志

一个典型的Web服务器的访问日志类似如下,包含访问来源、用户、访问的资源地址、访问结果、用户使用的系统及浏览器类型等。127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "[http://www.example.com/start.html](http://www.example.com/start.html)" "Mozilla/4.08 [en] (Win98; I ;Nav)"

最简单存储这些日志的方法是,将每行日志存储在一个单独的文档里,每行日志在MongoDB里的存储模式如下所示:{

_id: ObjectId('4f442120eb03305789000000'),

line: '127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "[http://www.example.com/start.html](http://www.example.com/start.html)" "Mozilla/4.08 [en] (Win98; I ;Nav)"'

}

上述模式虽然能解决日志存储的问题,但这些数据分析起来比较麻烦,因为文本分析并不是MongoDB所擅长的,更好的办法是把一行日志存储到MongoDB的文档里前,先提取出各个字段的值。如下所示,上述的日志被转换为一个包含很多个字段的文档。{

_id: ObjectId('4f442120eb03305789000000'),

host: "127.0.0.1",

logname: null,

user: 'frank',

time: ISODate("2000-10-10T20:55:36Z"),

path: "/apache_pb.gif",

request: "GET /apache_pb.gif HTTP/1.0",

status: 200,

response_size: 2326,

referrer: "[http://www.example.com/start.html](http://www.example.com/start.html)",

user_agent: "Mozilla/4.08 [en] (Win98; I ;Nav)"

}

同时,在这个过程中,如果您觉得有些字段对数据分析没有任何帮助,则可以直接过滤掉,以减少存储上的消耗。比如数据分析不会关心user、request、status信息,这几个字段没必要存储。ObjectId里本身包含了时间信息,没必要再单独存储一个time字段。(带上time也有好处,time更能代表请求产生的时间,而且查询语句写起来更方便,尽量选择存储空间占用小的数据类型)基于上述考虑,上述日志最终存储的内容可能类似如下所示:{

_id: ObjectId('4f442120eb03305789000000'),

host: "127.0.0.1",

time: ISODate("2000-10-10T20:55:36Z"),

path: "/apache_pb.gif",

referer: "[http://www.example.com/start.html](http://www.example.com/start.html)",

user_agent: "Mozilla/4.08 [en] (Win98; I ;Nav)"

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值