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

アーカイブの一覧に戻る

Kouhei Sutou kou****@clear*****
2012年 12月 19日 (水) 22:08:10 JST


須藤です。

In <CA+vp****@mail*****>
  "[groonga-dev,01138] 特定条件にマッチするレコードの一括削除" on Tue, 18 Dec 2012 10:03:02 +0900,
  ongaeshi <ongae****@gmail*****> wrote:

> rroongaで特定の条件にマッチするレコードを削除する時、
> 
> def remove_match_path(path)
>  result = search(path)          # 内部で Groonga::Table#select を呼んでレコードを抽出
> 
>   result.each do |record|       # 検索結果をeachで辿って・・
>     @table[record.path].delete  # Groonga::Recored#delete で削除
>   end
> end
> 
> ・・という方法をとっていますが、数万オーダー位の
> レコードを削除しようとすると時間がかかり困っています。

ですよね!

> 少し調べてみた所、
> 
> groonga 1.2.9リリース
> http://groonga.org/ja/blog/2011/12/29/release.html
> 
> にて「レコードの一括削除に対応」というトピックを見つけました。
> 
> 紹介されていた「特定条件にマッチするレコードの一括削除」を
> 【rroongaから】行うことは可能でしょうか?

できません!

なので、作ります!
↓こんな感じのものを作ると思います。

  table.delete do |record|
    # table.selectと同じように条件を指定する
  end

Cレベルでカーソルを回すのでRubyレベルでループを回してレコー
ドを削除するよりも断然速くなると思います!

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

groongaサポート:
  http://groonga.org/ja/support/
パッチ採用はじめました:
  http://www.clear-code.com/recruitment/




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る