[groonga-dev,01143] Re: 特定条件にマッチするレコードの一括削除

Back to archive index

ongaeshi ongae****@gmail*****
2012年 12月 22日 (土) 01:00:20 JST


ongaeshiです。

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


2012年12月20日 16:14 Kouhei Sutou <kou****@clear*****>:

> 須藤です。
>
> In <CA+vpKip4WwqgZG8ZD=NWfsd****@mail*****>
>   "[groonga-dev,01140] Re: 特定条件にマッチするレコードの一括削除" on Thu, 20 Dec 2012
> 10:59:50 +0900,
>   ongaeshi <ongae****@gmail*****> wrote:
>
> >> > groonga 1.2.9リリース
> >> > http://groonga.org/ja/blog/2011/12/29/release.html
> >> >
> >> > にて「レコードの一括削除に対応」というトピックを見つけました。
> >> >
> >> > 紹介されていた「特定条件にマッチするレコードの一括削除」を
> >> > 【rroongaから】行うことは可能でしょうか?
> >>
> >> できません!
> >>
> >> なので、作ります!
> >> ↓こんな感じのものを作ると思います。
> >>
> >>   table.delete do |record|
> >>     # table.selectと同じように条件を指定する
> >>   end
> >>
> >> Cレベルでカーソルを回すのでRubyレベルでループを回してレコー
> >> ドを削除するよりも断然速くなると思います!
> >>
> >
> > おお!ありがたいですー。
> > 実装されるのを楽しみにしております。
>
> 実装して、速度を測ってみたら言うほど変わりませんでした!
>
> 対象:
>   るりまのデータ 47634件
> 削除するレコード数:
>   24817件
>
> select結果をeachしてdeleteしたときの削除時間:
>   約104秒
>
> deleteで条件をしてまとめて削除したときの削除時間:
>   約95秒
>
> なので、別の方法のご提案です。
> 削除前にインデックスを削除し、削除後にインデックスを再度追加
> してください。こんな感じです。
>
>   needless_records = table.select {...}
>   Groonga::Schema.define do |schema|
>     schema.table_change("Lexicon") do |table|
>       table.remove_index("...")
>     end
>     ...
>   end
>   needless_records.each do |record|
>     record.key.delete
>   end
>   Groonga::Schema.define do |schema|
>     schema.table_change("Lexicon") do |table|
>       table.add_index("...")
>     end
>     ...
>   end
>
> ↑のようにした時の削除時間(インデックスの再構築を含む):
>   約4.4秒
>
>
> ということで、レコード削除処理はインデックスからの削除に時間
> がかかっているので、それを一時的に止めれば速くなります。
>
> ただし、deleteに条件を指定してまとめて削除する方法とインデッ
> クスを一時的に止める方法は兼用できません。というのも、delete
> 対象のレコードを捜すためにインデックスを使うため、インデック
> スを削除してあると削除対象のレコードを見つけるのが遅くなった
> り、見つけられなくなったりするからです。
>
>
> 今回追加したdeleteでまとめて削除機能は便利なこともあると思う
> ので残しておきます。
>
> --
> 須藤 功平 <kou****@clear*****>
> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)
>
> groongaサポート:
>   http://groonga.org/ja/support/
> パッチ採用はじめました:
>   http://www.clear-code.com/recruitment/
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
>



-- 
/******************************************
 ongaeshi
 MAIL:   ongae****@gmail*****
 WEB:   http://ongaeshi.me
 Twitter: http://twitter.com/ongaeshi
 ******************************************/



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