磯部 和広
k-iso****@rozet*****
2013年 3月 29日 (金) 16:57:38 JST
いつもお世話になっております。 自分は、groongaをMySQL経由でmroongaとして使っています。 MySQLの場合、様々な高速化の手段がありますが、 特に検索主体のテーブルの高速化に、下記の技法があります。 1. ストレージエンジンをMyISAMにする。 2. キーをメモリバッファに登録する。 3. 必要であれば、実データをOSキャッシュに乗せる groongaの場合、どんなに大きなDBでも、マシンの再起動時には メモリに乗っていないですよね。 このため、検索の動きが a. リクエストを受ける b. 必要な(転置インデックス等の)データをメモリにロードする c. 検索処理を行う という形になると思っています。 最近はマシンのメモリが安く、手軽に32GBメモリのマシンが構築できます。 groonga側で、何らかの手段で 検索の為のインデックスデータを全てメモリに乗せる という事が出来れば 上記のc.だけとなる ので、かなり高速になると思います。 現在は、 groongaのデータをRAM-Disk上に置き、ロード処理を高速にする という手法で逃げていますが RAM-Diskはメモリの半分 という制約がありますし、ロード待ちの時間が最小にはなりますが それでも 遅い。もっと速くならないか と言われていまして・・・ 併せまして、 mroongaのインデックスを再作成等した場合 全てのインデックスなどのデータがメモリ上に存在しているのか についてもお答え頂ければ幸いです。 勿論、groongaのデータがメモリに乗るサイズでの話ですが。 もしも 現在、groongaのインデックス情報を全てメモリに乗せる方法は無い が、mroongaでindexを作成すれば、作成過程でメモリに乗る という事であれば、最悪、再起動時にそのオペレーションをするしか・・・ と思いまして。