描述
目前要做的是多臺服務器上的程序日誌(如訂購日誌,交易日誌,接口是否成功等)彙總到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按小時寫入的臨時集合,在臨時集合中統計小時業務數據到小時表