Kouhei Sutou
kou****@clear*****
2011年 5月 13日 (金) 17:21:41 JST
須藤です。 In <a6908f01-3b33-33d8-9193-881016b4afc6 @ api106> "[groonga-dev,00516] Re: Re: キャッシュのクリア" on Fri, 13 May 2011 12:18:53 +0900, "Endo Akira" <endo4****@goo*****> wrote: > 状況をどのように伝えられるか、も技量のうちで、どこが肝か分からないのが > 質問しますので、申し訳ありません。 いえいえ! > さて、実際の構成は、 >> 検索: >> ブラウザ <- 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"するのがよいと思います。) -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) プログラミングが好きなソフトウェア開発者を募集中: http://www.clear-code.com/recruitment/