我寫了一個python腳本解析Apache日誌,並將其存儲在MongoDB中採用以下格式:如何將文件附加到現有文件中的mongodb
{
"_id": ObjectId("589e77cf74eea90879f49c80"),
"http_version": "HTTP/1.1",
"time": ISODate("2017-02-11T02:32:46Z"),
"server_ip": "x.x.x.x",
"method": "GET",
"content_length": 529,
"referral": "-",
"uri": "/xxxxxxx.sdsd",
"agent": "Mozilla/5.00 (Nikto/2.1.5) (Evasions:None) (Test:map_codes)",
"status_code": 404
}
我需要找到的404,200的數量和每個IP地址302個請求。我又寫了一個腳本來獲取值並將其存儲在字典中。但是,該腳本需要2分鐘才能獲取結果。
db=conn.http_bank
resp= db.http_bank.distinct("server_ip")
total_count=db.http_bank.find().count()
print total_count
def status_code(db,i):
dict_status_code={}
dict_status_code[i]={}
dict_status_code[i].update({'200':db.http_bank.find({"server_ip":i,"status_code":200}).count()})
dict_status_code[i].update({'404':db.http_bank.find({"server_ip":i,"status_code":404}).count()})
dict_status_code[i].update({'302':db.http_bank.find({"server_ip":i,"status_code":302}).count()})
print dict_status_code
print status_code(db,"x.x.x.x")
我需要改變我的Python代碼邏輯或者我應該改變我存儲在MongoDB中數據的方式?
任何幫助,高度讚賞。
這工作就像一個魅力。這是3分鐘前。現在需要50秒來獲取所有數據。 – vijay
對於這樣的基本查詢,50秒仍然非常緩慢,請務必檢查我的答案。 – leonziyo
我在一個集合中有400K個文檔。 – vijay