はじめに
先日のPHPカンファレンス2019にてtrdsql
なる便利ツールを知り、これ実業務に適用できたらログ調査とか楽になるかなーと思い触ってみました
実業務のログファイルは大変大きいファイルなのでどの程度まで耐えられるのか?
sqlと謳っているがindex的な概念はあるのか?
このあたりを調べてみました
対象ログ
とあるログ
- 126,945,759行(約1億2000万行)
- 13.8GB
- タブ区切り
フォーマットは以下の感じ
ipアドレス 実行したdatetime ログID 実行したmsec
なるほど確かに重い
こいつに対してサクサク検索かけられたらめっちゃ強い
とりあえず試してみる
インストールはgithubに記載の通りでいけた
go get -d github.com/noborus/trdsql
cd $GOPATH/src/github.com/noborus/trdsql
make
make install
とりあえず1件取得
タブ区切りのファイルは以下の感じで指定するといける
ヘッダーはないのでc1とかc2とかでカラム指定をする
trdsql -id "\t" "SELECT c2 FROM test.tsv limit 1"
実行結果: 2019/12/10 00:00:00
実行時間: 7分40秒
あ…あれ…?
1件取得で既にこの実行時間…これはダメかもしれん…
大体やりたいのは時間による絞り込みなのでc2で一定期間のログを集計してみる
trdsql -id "\t" "SELECT count(*) FROM test.tsv where c2 between '2019/12/10 00:30:00' and '2019/12/11 00:35:00'"
実行結果: 30569145
実行時間: 9分20秒
うーん、思ったよりはマシだったがこのレベルだと普段の調査では使い物にはならなそう
まとめ
trdsql
は大変使い勝手の良いツールですが速度面で言うと、大きいファイルに対してはあまり有用ではなさそうでした
sqlライクにしているだけでindex的な概念もなさそう
結局less
したりファイル分割したりして細かく見ていくしかないのか…
追記
そーだいさんからtwitterにてコメントをもらいました