背景:主機(jī)統(tǒng)計按每5分鐘create一個進(jìn)程進(jìn)行統(tǒng)計最近24小時的日志,統(tǒng)計host數(shù)據(jù)衣形,然后存在到host_all里面驼侠,在host_all里面主要記錄host, create_time(首次發(fā)現(xiàn)host的時間), lastupdate_time(最后一次發(fā)現(xiàn)host的時間)
經(jīng)過調(diào)試發(fā)現(xiàn)在主機(jī)統(tǒng)計中index或者update 文檔時速度比較慢(每次提交差不多1-2秒才結(jié)束)谆吴,導(dǎo)致統(tǒng)計在5分鐘內(nèi)未完成倒源,導(dǎo)致多個進(jìn)程同時進(jìn)行主機(jī)統(tǒng)計,由于多個進(jìn)程導(dǎo)致host_all中的host不唯一
目前主要修改
1.將統(tǒng)計結(jié)果在存儲es時使用的index和update修改為bulk
2.在pyes進(jìn)行matchall時句狼,每次查詢size為10笋熬,將其設(shè)置為1000
目前統(tǒng)計基本在20s左右完成
需要注意的是:
1.在使用bulk時,如果有update的內(nèi)容腻菇,需要注意在調(diào)用flush_bulk(forced=True)方法時如果提交數(shù)據(jù)會發(fā)生異常胳螟,原因時,pyes會對提交返回的數(shù)據(jù)進(jìn)行檢查筹吐,而在檢查結(jié)果中不支持update方法(見pyes.models 212行函數(shù))
可以通過設(shè)置bulk對象的raise_on_bulk_item_failure為False糖耸,不進(jìn)行結(jié)果檢查
2.注意在創(chuàng)建pyes.ES也有raise_on_bulk_item_failure參數(shù),在調(diào)用create_bulker是也使用該屬性初始化bulk對象骏令,但是有bug(見pyes.es 395行函數(shù))蔬捷,返回值錯誤
3.設(shè)置pyes進(jìn)行matchall的時使用pyes.search(pyes.Search(filter=pyes.MatchAllFilter(), bulk_read=1000), indices=index_name, doc_type=doc_type_name)
4.在index后可以返回document id,若需要時用該id做去重之類的工作,可以使用flush_bluk后返回的結(jié)果周拐,注意flush_bluk可能返回None铡俐,如果提交數(shù)據(jù)行數(shù)未達(dá)到400行(可設(shè)置),也可以使用flush_bluk(True)強(qiáng)制提交數(shù)據(jù)到es妥粟,根據(jù)返回結(jié)果中的id审丘,可通過mget獲取提交的文檔內(nèi)容(注意需要在下次使用該數(shù)據(jù)之前強(qiáng)制更新數(shù)據(jù)到es)