場景:
用戶的系統越來越復雜,多系統,多服務,分散在不同的主機或者容器中,AIops和數據分析,數據挖掘的需求越來越迫切,數據需要從不同的分散的系統采集出來,集中處理,那么數據庫的數據采集也是比較重要的一塊需求!用戶對數據庫采集的需求,主要是數據需要實時采集,數據完整性,不丟一條數據,另外采集程序的資源消耗要小,一般小於%5。
分析:
1.數據庫種類比較多,類別分為關系型數據庫,nosql數據庫
2.數據表不固定
3.數據采集效率依賴數據庫的查詢效率,所以采集需要最優
4.需要考慮資源消耗
方案:
1.關系型數據庫:采集sql+driver層的結構,保證通用性
2.nosql數據庫:這個不具有通用性,需要單獨適配
3.出於采集端性能和資源的需求,不能在采集端排序
4.出於數據庫端的查詢資源消耗,盡量要避免在查詢中使用排序
5.數據完整性需求,需要考慮數據落盤時間
綜上需求考慮,方案如下:
關系型數據庫:采用sql+driver層的結構,優先采用時間范圍查詢采集數據,為了保證數據的實時性,需要延時查詢,同時支持索引,時間戳等
方式
nosql數據庫:使用不同數據庫的driver來采集數據,采集方式同關系型數據庫
為什么不使用排序?
經過實踐證明,在用戶錯中復雜的數據庫使用環境中,大數據量,高負荷,即使最簡單的排序查詢,也需要較高的CPU消耗, 導致查詢時間過長。
結束:
采集器一般是和宿主機運行在一起的,即使是數據庫通過網絡查詢,最終的查詢壓力也是傳導到用戶的數據庫,所以,要求采集器的資源消耗一定要小,避免對用戶的系統產生影響,這個是第一優先要考慮的因素,重中之重!