読者です 読者をやめる 読者になる 読者になる

Digest::MurmurHash v0.2.1リリース

というわけでDigest::MurmurHashの内部にあった、ただ文字列を溜めておくだけのクラスを切り出して別GemのDigest::StringBufferとして、これを継承するようにした版を作りました。

またMurmurHash2Aアルゴリズムを追加。ハッシュ値を数字として取り出すrawdigestの高速化も行いました。、20文字のランダムな文字列を1万回MurmurHash1でハッシュ値(数字)を取得する場合、pureRubyの場合に比べて約40倍高速に動作します。

$ bundle exec ruby spec/bench.rb

### condition

    RUBY_VERSION = 2.0.0
    count = 100000

### benchmark

       user     system      total        real
pureRuby  1.180000   0.010000   1.190000 (  1.186776)
Prime37  0.890000   0.010000   0.900000 (  0.903354)
MurmurHash1  0.030000   0.000000   0.030000 (  0.029737)
MurmurHash2  0.030000   0.000000   0.030000 (  0.029815)
MurmurHash2A  0.040000   0.000000   0.040000 (  0.032749)

### real second rate (pureRuby/)

    1.0/pureRuby
    1.313744113603305/Prime37
    39.90906950936544/MurmurHash1
    39.8046620828442/MurmurHash2
    36.23854163485908/MurmurHash2A

### confrict count (/100000)

    pureRuby: 2
    Prime37: 652
    MurmurHash1: 2
    MurmurHash2: 0
    MurmurHash2A: 0

これでそろそろ本題のDBM実装に入れるかな……

リンク

https://rubygems.org/gems/digest-murmurhash

https://github.com/ksss/digest-murmurhash/blob/master/spec/bench.rb