描述
目前要做的是多台服务器上的程序日志(如订购日志,交易日志,接口是否成功等)汇总到1个mongodb服务器,每日大约1亿的量,然后有图表实时展现,和报表展现日志信息
注意:
没有把所有日志放入1张表里面,因为日志插入很频繁会导致锁表,二是量大了影响查询速度。没有考虑用分片,因为针对我们的业务查询,分片没得分表效率高。用上了mongodb的副本集来保证服务器稳定运行 和 主从库读写分离来提高效率。
方案
1:简化入库,使用log4j配置把log4j日志以统一的json格式直接存入到mogodb
2:建立4张表
a:总表(全部日志)【单独建个库来保存,这样防止写入全局锁影响查询】
b:小时临时表:
格式:2013122106 注:2013年12月21日6时log4j写入的日志汇总
小时表:(crontab或者quartz定时统计前一小时临时表的业务所需数据,如某小时交易总量,成功率,各种聚合值等)
c:建立固定集合来存放最近2小时的数据。大小固定,效率高,自动会替换老的数据【随时在插入数据,所以会影响查询,建议放到mongodb的内存数据库和固定集合,提升效率】
d:天表(小时表的汇总)
业务处理
1小时内图标实时展现(固定集合能满足)
当天图表实时展现(小时表+固定集合能满足)
表报统计(小时表或者天表,有需求+月表或者年表)
遇到问题
mongodb使用import导入数据速度不稳定,所以如果导入数据有时间要求的话,建议使用程序批导入,
mongodb对插入会出现锁表,locked集合,影响集合查询, 不要把log4j的日志直接写入总表,在统计小时业务聚合信息,因为总表数量大了,效率很慢。建议log4j按小时写入的临时集合,在临时集合中统计小时业务数据到小时表