スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PostgreSQLとRubyを組み合わせてブラックリストチェックの速度を測ってみた。

とある文章がブラックリストに載っているかどうかを判定しようと思っています。ブラックリストが4000レコードもあって、単純に見つかるまで処理すると遅いだろうと思い色々な方法で試して速度を測ってみました。
それぞれ100回回しています。

1. SELECT id FROM dirty_words WHERE 'うんこ' ~* dirty_content
9秒

2. SELECT 'うんこ' ~* string_agg(dirty_content, '|') FROM dirty_words
4秒

3. SELECT string_agg(dirty_content, '|') FROM dirty_words
返ってきた値に対してRubyの正規表現チェック
1秒

4. SELECT dirty_content FROM dirty_words
返ってきた値に対して、Rubyで文字列結合してRubyの正規表現チェック
6秒

5. SELECT dirty_content FROM dirty_words
返ってきた値に対して、それぞれでRubyの正規表現チェック
8秒

ということで、PostgreSQL側で一行にまとめて、Rubyで正規表現チェックするのが早いことがわかりました。
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。