Endo Akira
endo4****@goo*****
2011年 5月 14日 (土) 05:39:50 JST
遠藤です。
下記は了解しました。
DBを作り直しているので、既存のDBを修正してDatabase#touch
するのとはケースが違ったのですね。
groongaのDocumentationの中にはtouchに相当するものが
見当たらないようです。また、groongaで存在するレコードの
データを修正するにはどうするのでしょうか。削除してloadする?
> > さて、実際の構成は、
> >> 検索:
> >> ブラウザ <- HTTP -> Rails3 (DBはここ)
> >> rroonga
> >> context.sendで検索
> >> (table.selectなどは使っていない)
> >>
> >> 更新:
> >> データ → rroonga (DBはここ)
> >> データ更新
> >>
> >> まずは、私が理解している構成があったいるかどうかを教えてもら
> >> えると嬉しいです!
> > で大体合っていて、Rails3からの検索は、Groonga["name"].select{|r| r=~"search_text"}と
> > 書いています。
> >
> > 更新は別の場所にDBを相対パスで作り、Rails3の中に移動させています。
>
> なんとなくわかった気がします!
>
> データベースを更新するときは、↑のRails3のところはこうなって
> いるんですね?
>
> 1. Rails3は更新前のデータベースを開いている。
> 2. 別プロセスでrroongaが新規にデータベースを作る。
> 3. 2.のプロセスが2.で作ったデータベースにデータを投入する。
> 4. 1.が開いているデータベースを移動して、2-3.で作ったデー
> タベースを1.が開いていたパスへ移動する。
>
> で、
>
> 5. Rails3を再起動。
> 6. Rails3は2.-3.で作った新しいデータベースの内容で検索開始。
>
> ということですね?
>
> そして、本当は5.で再起動せずに別の方法で6.を実現したいという
> ことですね?
>
>
> ↑が当たっているとして話を進めると、5.で行っていることは
> 「キャッシュのクリア」ではなくて、「データベースの再オープン」
> です。Rails3とは別プロセスでデータベースファイル群を移動して
> も(4.の作業)、Rails3は移動前のデータベース(1.で開いている
> データベース)を開いたままです。そのため、6.を実現するために
> は、Rails3は2.-3.で作ったデータベースを再オープンする必要が
> あります。
>
> データベースの再オープンはRails3のところのアプリケーション固
> 有の問題になるので、再起動せずにデータベースの再オープンを実
> 現するのであれば、それ用の仕組みを組み込む必要があります。
>
> 個人的には再起動でいいような気がします。
> (PassengerでRails3を動かしているのであれば、夜のDB更新後に
> "touch #{Rails.root}/tmp/restart.txt"するのがよいと思います。)
元データが追加だけではなく、修正もはいるものなので、差分でDBを
更新というのも面倒で、いちいち作り直しているのですが、
月曜日に差分を修正する形に組み直して、Database#touchして成果を
ご報告します。