LoginSignup
6
7

More than 3 years have passed since last update.

爆速 grep「ripgrep」をラズパイにインストールする【実測値あり】

Last updated at Posted at 2017-07-24

TL;DR

通常の grepag よりも圧倒的に早いというRipGrep」(rg)を Raspbian にインストールする方法と簡単な使い方です。

MacOSX へ入れてみたり、さくらのVPS(CentOS7)に入れて見たところ非常に早かったのですが、 RaspberryPi3 + Raspbian(Jessie, Debian8.0)にインストールする場合の情報が少なかったので、軽いストレス・テスト(実測)をかねて記事を書いてみました。

結論を言うと 10.5GB のファイルを全文検索してgrep と比較して 30 秒以上の差が出ました。

TS;DR

RipGrepとは

RipGrep(rg)は、grep に似たコマンドライン・ベースの UTF-8 対応テキスト検索ツールです。

BurntSushi 氏によって Rust で書かれており、Silver Searcherag) の使いやすさと GNU grepgrep)の本来のスピードを兼ね備えています。 Windows, Mac, Linux などの OS で動作します。

インストール

Raspbian Buster では apt でインストールできます。ARMv6l(ラズパイ Zero W)アーキテクチャでも動作しました。

sudo apt install ripgrep
簡易インストール
$ sudo apt install ripgrep
...
$ rg --version
ripgrep 0.10.0
-SIMD -AVX (compiled)

上記でインストールできない場合は下記でお試しください。

本来のインストール方法
cd ~/
# 依存ファイルのインストール(基本デフォルトのまま進んでOK)
curl https://sh.rustup.rs -sSf | sh
sudo apt-get install debhelper
sudo apt-get install devscripts
sudo apt-get install quilt

# cargoのパスを通す
source $HOME/.cargo/env

# ripgrepのインストール
cargo install ripgrep

使い方

rg 'メキシコ'

正規表現も使えます

rg '1[^7][0-9[0-9]年'

詳しくはrg --helpコマンドでヘルプをご覧ください

実測してみた

Wikipediaからダウンロードした 10 ギガバイトの XML のテキストファイルから「メキシコ」という単語を検索して、その結果をファイルに書き込み終えるまでの速度を比較してみました。

ファイルサイズ 検索単語 平均秒数 差分
grep 10.5GB 'メキシコ' 502 +35
rg 10.5GB 'メキシコ' 467 0

測定方法

コンマ何秒というレベルの差ではないため、linux の $SECONDS を使って経過時間を測定します。

検索開始前に $SECONDS のカウンターをリセットし、検索結果をファイルに書き込んだ時点までの秒数を測定しています。

留意点として、データ量が大きいため USB2 の外付けハードディスクに保存しての測定なので本来はもう少し早いと思います。

検証データの準備

Wikipedia の日本語データを、外付け HDD(/mnt/hdd1/wikipedia) にダウンロード&展開します。10.5 ギガバイト程度あるのがわかります。

$ cd /mnt/hdd1/
$ wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
$ bunzip2 jawiki*
$ ls -la
合計 10285620
drwxr-xr-x 3 root root        4096  7月 24 17:38 .
drwxr-xr-x 3 root root        4096  7月 15 01:36 ..
-rw-r--r-- 1 root root 10532457736  7月 22 02:23 jawiki-latest-pages-articles.xml

測定

grep
$ cd /mnt/hdd1/
$ SECONDS=0 && grep 'メキシコ' *.xml > ~/result_grep.txt && echo ${SECONDS}
分:秒
502 8:22
502 8:22
500 8:20
504 8:24
501 8:21
平均 ---
502 8:22
rg
$ cd /mnt/hdd1/
$ SECONDS=0 && rg 'メキシコ' > ~/result_rg.txt && echo ${SECONDS}
分:秒
455 7:53
463 7:43
463 7:43
478 7:58
475 7:55
平均 ---
467 7:47
6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7