Kouhei Sutou
kou****@clear*****
2014年 9月 13日 (土) 12:33:21 JST
須藤です。 In <CAH9Y0y4+TG7qtGNmMiB2ZJG_=wCzrU****@mail*****> "[groonga-dev,02768] Heroku用Groongaの形態素解析対応について" on Sat, 13 Sep 2014 08:51:34 +0900, 杉本涼 <sugry****@gmail*****> wrote: > 須藤さんが、前にMeCabに対応したいと言っていたので対応したいと思いました。 ありがとうございます! > 僕は、KyTeaとMeCabのどちらにも対応させたいのですがどう思いますか? はい、よいと思います! ただ、1つ注意する点があります。それはビルド後のデータのサイ ズです。形態素解析器は辞書が必要なんですが、一般的にそれらは 大きめのサイズになります。 Herokuでは各アプリケーションのインスタンスが使えるサイズに制 限があるようです。このサイズにはビルド後のデータサイズ (KyTeaやMeCabを含む)も含まれます。 Heroku用のGroongaはローカルにデータを保存する作りなので、ビ ルドのデータサイズが増えると、その分、ローカルに保存できるデー タのサイズも小さくなると思います。 (ちゃんと計算すると「そんなの気にしなくてよい」となるかもし れません。) あ、 http://www.clear-code.com/blog/2014/5/28.html にちょっ と検討してみたのが残っていました。 > slugの最大サイズは300MB > > データ量はどうして多くないのか説明します。 > > それは、dynoが使えるローカルストレージのサイズにそんなに大 > きくない上限があるだろうからです。実際に上限がいくつかはわ > かりませんが、1GB強くらいでしょう。 > > 予想してみましょう。 > > slugの最大サイズは300MBです。slugはgzで圧縮されています。 > Rubyのビルドパックでできるファイルがだいたい100MBで、それ > をtar.gzにすると25MBくらいです。そのため、ここでは1/4くら > いに圧縮できると考えます。dynoではslugを展開して利用します。 > 1/4に圧縮されているとすると、展開後は1.2GBになります。その > ため、1GB強くらいが上限になっていると考えられます。 > > しかし、展開後で1.2GBになるdynoは想定外でしょうから、実際 > に使えるのはもっと少ないと考えるべきです。半分の500MBくら > いとしましょう。そのうち、Ruby関連のファイルで100MBくらい > 使います。残りは400MBです。Groongaのデータベースはインデッ > クスの張り方にもよりますが、少なくとも検索対象のデータ(入 > 力データ)の3倍以上の大きさになります。実際にはいくつかイ > ンデックスを張るでしょうから、4倍以上などもっとサイズが増 > えます。よって、入力データは多くても100MBより少なくしなけ > ればいけません。 > > つまり、それほど大きなデータを扱うことはできないということ > です。そのため、Groongaのデータベースの作成にかかる時間も > 短くなり、dynoを起動する毎にGroongaのデータベースを作るこ > とも現実的になります。 KyTeaやMeCabを使いたい人はビルドのサイズが増えるのはしょうが ないのですが、使わない人はKyTeaやMeCabのせいでサイズが減るの はかわいそうだなぁと思います。 対策として、 heroku config:set GROONGA_KYTEA_ENABLE=no とか heroku config:set GROONGA_MECAB_ENABLE=no とかしたらheroku-buildpack-groonga:bin/compileでKyTeaやMeCab 関連のファイルをrmするといいんじゃないかなぁと思いました。 (ビルドするときは常にKyTeaやMeCab関連のものもビルドして GitHubにアップロードしておいて、展開するときに削除する。) と、まぁ、考えてみたんですが、最初はそこまで頑張らなくてもよ くて、おいおい対応していくのでもいいかなぁという気もしていま す。とりあえず、KyTeaやMeCab入りにするとサイズがどのくらい増 えるのかを見てからですかねぇ。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ: http://www.clear-code.com/services/code-reader/