我必須經常分析非常大的(abt 40Gb)文本文件(日誌)。 通常AWK/grep足夠滿足我的需求,但日誌越來越多,現在我很好奇sqlite3是否會讓我更有效地做同樣的事情。 我爲我的測試選擇了sqlite,因爲它在我的Linux機器上安裝了開箱即用的(SQLite版本3.6.4),而更復雜的工具會在這個簡單的任務中引入太多開銷。將AWK命令轉換爲sqlite查詢
這是我一貫的awk查詢之一(我簡化在這個例子中的日誌結構,實際上它由超過50場的):
zcat log*.gz | awk -F'|' '{total+=$1;total+=$2;if($3==404){failed+=$1;failed+=$2}}END{print "Total="total,"\nfailed="failed,"\nRatio="failed/total}'
所以在這裏我們總結和變量字段1的值2 'total',另外如果field3 == 404變量'failed',我們將它們相加,然後通過除法計算比率。
我將日誌轉換爲sqlite數據庫,並準備開始性能測試......但發現sqlite不支持存儲過程(我不是SQL人員,所以這是我第一次檢查並開始sqlite),所以我現在還不清楚如何保持變量的中間值
是否有一些解決方法(不要使用存儲過程)使用sqlite有效地執行相同的計算?
是的,導入速度很慢,而且它需要數據驗證(有時由於應用程序故障,日誌可能不完整)。 但在某些特定情況下,它確實值得。 在我的測試數據集上,我使用查詢得到了1m47s(sqlite)與15m27s(awk) 我知道它應該用於嵌入,但我認爲我可以用它替換awk oneliners(至少我希望如此) –
您的時間不包括進口,是嗎?如果你想做多個查詢,SQLite很有用。 –
當然,進口時間不包括在內,花了30分鐘,所以我只會使用sqlite,如果我需要從相同的日誌中獲取數據超過5次 –