Naoya Murakami
visio****@gmail*****
2013年 12月 7日 (土) 00:45:02 JST
お世話になっております。村上です。 2013年12月6日 17:18 Kouhei Sutou <kou****@clear*****>: > 須藤です。 > > In <JxzEf****@netag*****> > "[groonga-dev,01944] Re: FULLTEXTインデックス以外での絞り込みについて" on Fri, 06 Dec 2013 > 11:13:11 +0900, > sinoh****@netag***** wrote: > > > Groongaのどこらへんが遅いのかちょっと測ってみたのですが、 > 結果レコードセットを作るところが遅いですねぇ。。。 > > 結果レコードセットを作るの以外(検索を含む)で0.1秒くらいなの > で、結果レコードセットを作るので1秒以上かかっていますねぇ。 > > > http://groonga.org/ja/publication/presentation/groonga-night-2-the-future.pdf > の18ページのベンチマークを見ると、grn_hash(結果レコードセッ > トを入れるテーブル)は1レコードあたり0.5マイクロ秒かかるっぽ > くて、今回は500万件ヒットしているので、 > > 0.5 * 5_000_000 = 2500000.0マイクロ秒 = 2.5秒 > > となって、まぁ、1秒以上かかりそうだなぁという感じはしますね。 > > 結果レコードセットが遅いということはわかったので、そんなに大 > 量にヒットしないやつなら速いはずです。 > お!ちゃんと読んでみて気づいたのですが、 結果レコードセットが非常に多いと結構時間がかかるんですね! 絞込みなし、検索結果が1件なのに、数十秒かかっていたパターンもあったり、 語彙集に含まれる語句の出現回数が結構多いトークンを含む文章であっても、 絞込み無しだと数秒で、絞込みありだと0.数秒になったケースもあって、 何でかなぁと思っていました。 これで、語彙表に含まれる語句の出現回数が結構多いトークンを含む単語であっても、 絞込みの有の方が速度がでていた理由がわかりました。 当方の経験則上、全文検索結果が遅い場合、以下の3つの観点があるように 思われます。 1.検索がインデックスアクセスのみであるかどうか。 2.語彙集に含まれる語句の出現回数が非常に多いかどうか。 (影響がありそうな出現回数は、本当に非常に非常に多い場合で 大抵の規模の場合は耐えると思われます) 3.検索結果レコード数が多いかどうか。 (そこまでの劣化はないものの、結果レコード数に応じて数秒程度の劣化は生じうる。) このあたりでチューニングしていけば、大抵0.1s〜数秒以内には、結果が得られそうですね! 以上、よろしくお願いします。