RubyからRedisを使ってみる
前回は、Redisをインストールして簡単な動作確認をしました。
今回はRubyからRedisにアクセスしてみます。
ライブラリのインストール
rubyからアクセスするためのライブラリ redis-rb を使います。
gem からインストールできます。
gem install redis
単語辞書データのストレージとしてRedisを使おうと思いますので、
辞書をRedisに登録するためのプログラムをまずは作成します。
登録する辞書は前々回に使用した NAIST辞書を使います。
辞書データはこの様なCSVデータが入っています。
笹野本,1365,1365,7069,名詞,固有名詞,地域,一般,*,*,笹野本,ササノホン,ササノホン,, 笹薮,1358,1358,4975,名詞,一般,*,*,*,*,笹薮,ササヤブ,ササヤブ,, 笹葉峰,1360,1360,7342,名詞,固有名詞,一般,*,*,*,笹葉峰,ササバミネ,ササバミネ,, 笹流山,1360,1360,7342,名詞,固有名詞,一般,*,*,*,笹流山,ササナガレヤマ,ササナガレヤマ,, 笹流貯水池,1360,1360,7342,名詞,固有名詞,一般,*,*,*,笹流貯水池,ササナガレチョスイチ,ササナガレチョスイチ,, 笹竜胆,1358,1358,4975,名詞,一般,*,*,*,*,笹竜胆,ササリンドウ,ササリンドー,, 笹林,1365,1365,7069,名詞,固有名詞,地域,一般,*,*,笹林,ササバヤシ,ササバヤシ,, 笹路,1365,1365,7069,名詞,固有名詞,地域,一般,*,*,笹路,ソソロ,ソソロ,, 笹和田,1365,1365,7069,名詞,固有名詞,地域,一般,*,*,笹和田,ササワダ,ササワダ,, 笹塒山,1360,1360,7342,名詞,固有名詞,一般,*,*,*,笹塒山,ササトヤヤマ,ササトヤヤマ,,
各列の意味はこの様になっています
表層形 | 左文脈ID | 右文脈ID | コスト | 品詞 | 品詞細分類1 | 品詞細分類2 | 品詞細分類3 | 活用形 | 活用型 | 原形 | 読み | 発音 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
笹野本 | 1365 | 1365 | 7069 | 名詞 | 固有名詞 | 地域 | 一般 | * | * | 笹野本 | ササノホン | ササノホン |
笹竜胆 | 1358 | 1358 | 4975 | 名詞 | 一般 | * | * | * | * | 笹竜胆 | ササリンドウ | ササリンドー |
今回は単語とその読みを登録するものとし記号以外の品詞の単語を登録します。また読みと発音が異なる場合はそれぞれ登録することにします。
で登録するためのプログラムはこの様になります。
# coding:utf-8 require 'redis' unless ARGV.length==1 then p "Usage: setup_dict_redis.rb filename" exit 1 end redis = Redis.new redis.ping redis.flushdb filename=ARGV[0] File.foreach(filename) do |line| fields = line.split(",") unless /記号/ =~ fields[4] then redis.set "#{fields[11]}","#{fields[0]}" redis.set "#{fields[12]}","#{fields[0]}" if fields[11] != fields[12] end end redis.save info = redis.info p info["db0"] redis.quit
実行してみます。
$ wc -l naist-jdic-utf.csv 485863 naist-jdic-utf.csv $ time ruby setup_dict_redis.rb naist-jdic-utf.csv "keys=250490,expires=0" ruby setup_dict_redis.rb naist-jdic-utf.csv 31.40s user 6.52s system 97% cpu 38.836 total
元の辞書の単語数は485863語で、これから記号を除いています。
また上記のプログラムでは文字列型で登録しています。読みがキーになっているため同じ読みのものは後からの単語で上書きされます。
このためRedisに登録された単語数は 250490語になります。
この単語の登録が31.40sと言うことなのでめちゃくちゃ早いですね。
またRedisは永続化できるので先ほどのプログラムの最後でファイルに書き出しました。
データのファイルサイズがどれくらいかというと
$ ls -l /var/lib/redis/6379/ 合計 7808 -rw-r--r-- 1 root root 7994150 11月 29 23:29 dump.rdb
約8Mといったところです。
Redisで扱うことのできるデータ型は文字列型の他にリスト型、セット型、ソート済みセット型、ハッシュ型などがあります。
Redisについての詳しい説明は、下記を参照するとよいと思います。
redisドキュメント日本語訳 — redis 2.0.3 documentation
ニコニコ生放送に見る Redis 活用ノウハウ|gihyo.jp … 技術評論社
redis、それは危険なほどのスピード|サイバーエージェント 公式エンジニアブログ