[groonga-dev,01725] Re: 仮想メモリサイズを超えるmroongaのインデックス構築について

Back to archive index

Naoya Murakami visio****@gmail*****
2013年 8月 29日 (木) 16:42:09 JST


お世話になっております。村上です。

>もし余裕があるのなら(1)+「mallocが本当に失敗しているかを調べ
>る」(手順は後述)をしてもらいたいのですが、今のgroongaで
>90GiBのデータのオフラインインデックス構築は難しそうなのでお
>願いしづらいなぁというのが正直なところです。

可能な限り、原因を解明できたほうが、今後のためだと思いますので、
今晩はこれを仕掛けようと思います。また、明日、結果をご連絡します。

ちょっと疑問に思ったのですが、メモリ32Gでこうなるということは、
メモリがもっと小さくて、4GBとか8GBだともっと早くこの問題が
顕在化されるんですかね?
最近は、メモリが非常に大きくなってきて、データベース向けの
サーバなら100GB超のメモリも有り得るようにはなってきましたが、
まだまだ数GB程度のメモリのものも多く存在しそうです。

>また、スワップの追加は大変だと思うので、(3)データの持ち方を変
>えるのが現実的だと思います。せっかくいろいろ試してもらったの
>にすみません。。。

対応案のご提案ありがとうございます。いい案だと思います。
思いつきませんでした。上の結果いかんにかかわらず、
この対応は検討したいと思います。

なお、インデックスサイズは、ものすごく偏っていて、
以下のような感じだと思われます(だいたいの予想です)。
  * title:            1GiB
  * abstract:         5GiB
  * claims:           14GiB
  * description_19xx: 30GiB
  * description_20xx: 40GiB
  * property:         0GiB (ベクターカラム化して現状中身0です。)

それでも、1度、全体を19xxと20xxに水平分割にしてやった場合は、
インデックス構築ができたので、description_19xxと20xxを単独に
することで、インデックス構築に耐えれそうな気がします。

>検索するときにMATCH AGAINSTを複数指定しないといけなくなりま
>すが。。。

そこで、インデックスをわけるにあたって、以下の疑問点があります。

通常のSQL構文では、マルチカラムインデックスにしないと
複数のカラムを横断して全文検索ができないと思っています。
MySQLでは、以下のようにorで繋ぐと、片方のフルテキスト
インデックスしか使えないと認識しています。
この規模のインデックスなしの検索は破たんすると思っています。

where match against(descripiton_19xx) against('hogehoge' in boolean mode)
or match against(descripiton_20xx) against('hogehoge' in boolean mode)

groongaでは、マルチカラムだろうが単独カラムだろうがどっち
のインデックスでも||で全文検索できますよ。ていう記載があります。
http://groonga.org/ja/docs/tutorial/match_columns.html#id1


Q.MySQLからマルチでない複数の全文インデックスを跨ぐ検索を
することができますか?(両方のインデックスを使いつつ)

ひょっとしたら、以下のような指定はできるんじゃないかなぁと
考えています。
でも、この場合、match_columnsで指定できないので、1個1個
カラムと検索式を書かないといけないですかね?
また、この書き方と、マルチカラムの場合の速度差が気になります。

select * from ftext where match(description_19xx)
against('hogehoge + description_20xx:hogehoge' in boolean mode)
limit 1;

なお、少なくとも、mroonga_commandでselectしてmatch_colmuns を||
でつなげばできると考えています。

新規開発なので絶対に普通のSQL構文じゃなきゃいやだとか、そういう
制約はないです。
(水平分割するとSPIDERとの連携を考えなければいけませんが。)

速度差が顕著なのであれば、mroonga_commandでjsonを自前でparse
してもいいと思っています。
(たいして速度が変わらないのであれば、通常のレコード形式で
返ってきた方がうれしい。)

以上、よろしくお願いします。





groonga-dev メーリングリストの案内
Back to archive index