[groonga-dev,02078] Re: ストレージモードで転置索引テーブルからレコードを削除するとデータも削除される

Back to archive index

yoku ts. yoku0****@gmail*****
2014年 1月 28日 (火) 17:18:33 JST


こんにちは、yoku0825です :)

> 丸山さん

>.出来上がったインデックスを直接いじる という使い方あまり好ましくない気がします。

ううむ、悩ましいところです。
今のところアプリケーションからGroongaを直叩きやmroonga_commandはNGの方向で(変わるかもしれませんが)、
メンテナンサーがgroongaコマンド(or Rroonga)でゴニョゴニョしてやって、
アプリからはMATCH(..) AGAINST(..)だけで何とかできないかなぁと思っているので、こんなことをしているのでした :)


> ぱっと思いつくのは、
> http://groonga.org/ja/docs/reference/commands/select.html#query-expander のように "ストップワード" にしてやるというのはどうでしょうか。

ありがとうございます! 試してみます!


> 須藤さん

> 追加コミットがこれで、このコミットに含まれているテストがユー
> スケースを表しています。

ありがとうございます! なんとなく理解しますた!


> これはMySQLのキャッシュじゃないかと思います。

table_open_cacheとかすごく久し振りに思い出しました。そういえばありましたねそんなキャッシュが。。


> 想定はしていませんでしたが、動くといいなとは思いました!

俺もそう思います!


2014年1月28日 16:56 Kouhei Sutou <kou****@clear*****>:
> 須藤です。
>
> In <CAHB5oTOKg_noT7sK3B=9N3++Pde15cp0ZwCUd=ghX=ocdDY****@mail*****>
>   "[groonga-dev,02073] ストレージモードで転置索引テーブルからレコードを削除するとデータも削除される" on Mon, 27 Jan 2014 10:44:35 +0900,
>   "yoku ts." <yoku0****@gmail*****> wrote:
>
>> 作業のログはこんな感じになるのですが、
>>
>> https://gist.github.com/yoku0825/3a0f5adeba0be3aeb32f
>>
>> ・WHERE MATCH(val) AGAINST ('まご' IN BOOLEAN MODE)でnum= 1が引っかからないようにしたい
>> ・でもWHERE num= 1では当然引っかかってほしい(データはそのまま残る)
>> ・t1-valの_key== 'まご'を消せばいけるはず
>>
>> と思っていたのですが、カスケード削除に当たるのか、
>> t1テーブルのvalカラムがまるまる空っぽになってしまっています。
>
> これは期待していない挙動です!
>
> Groongaにはカスケード削除機能があって、これはインデックスのキー
> を消すと、インデックス元のレコード消す機能です。もともと、こ
> の機能は、全文検索用のインデックスではなく、逆引き用のインデッ
> クスのために追加したものです。
>
> 追加コミットがこれで、このコミットに含まれているテストがユー
> スケースを表しています。
>   https://github.com/groonga/groonga/commit/d488768d3eca23aadd1a429528a4054a1dcc53e3
>
> ユーザーがブックマークするみたいなサービス用のケースで、URL
> が消えたらユーザーのブックマークからも削除する、ということを
> 実現したいケースです。URLだけ消すと、ユーザーのブックマーク
> にすでに存在しないURLテーブルのレコードへの参照が残ってしま
> うので、いろいろ不具合があったのです。それが起きないようにカ
> スケード削除機能を追加しました。
>
>   ユーザーテーブル
>     ブックマークカラム(URLテーブル型。ベクター。)
>
>   URLテーブル
>     ユーザーテーブルのブックマークカラム用のインデックス(*)
>
> (*) URLを指定してブックマークしているユーザー一覧を高速に検
>     索するため。
>
>
> で!そのときは全文検索用のインデックスのテーブルのキー(トー
> クン)を削除することは想定していなかったのです!で、全文検索
> 用のインデックスで同じような挙動になるのは、変だなぁと思うの
> で、期待していない挙動です!
>
> 手元ではカスケード削除しないようにする変更があるんですが、今、
> コードフリーズ中なので、明日以降にpushしておきます!
>
>> (ストレージモードのみで、ラッパーモードでは期待した結果になりました)
>
> ↑のカスケード削除機能はGroongaのデータベース機能のレイヤー
> (テーブルとかカラムの関係とかを管理)のAPIで実装しているので
> すが、ラッパーモードのときは、それより下のレイヤーのAPIで、イ
> ンデックスを直接使っていたので関係無かったのです。
>
>> また、deleteを叩いた直後はMySQLからはdelete前の情報が見えていて、
>> FLUSH TABLESなどで開きなおしてやるとdelete後の情報が見えるようになっているようです。
>
> これはMySQLのキャッシュじゃないかと思います。
>
>> また、↑のような「あるレコードが特定のキーワードで(のみ)マッチしないようにする」のはt1-valの_keyをいじってやる…というのはそもそも間違っていたりしますか?
>
> 想定はしていませんでしたが、動くといいなとは思いました!
>
> --
> 須藤 功平 <kou****@clear*****>
> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)
>
> Groongaサポート:
>   http://groonga.org/ja/support/
> パッチ採用はじめました:
>   http://www.clear-code.com/recruitment/
> コミットへのコメントサービスはじめました:
>   http://www.clear-code.com/services/commit-comment.html
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev




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