[Groonga-commit] groonga/groonga.org at f109fc1 [gh-pages] blog ja: add a draft about chunk split in static indexing

Back to archive index

Susumu Yata null+****@clear*****
Fri Mar 25 21:21:04 JST 2016


Susumu Yata	2016-03-25 21:21:04 +0900 (Fri, 25 Mar 2016)

  New Revision: f109fc18ecf3a68f3afe828d11d9924500b52cc2
  https://github.com/groonga/groonga.org/commit/f109fc18ecf3a68f3afe828d11d9924500b52cc2

  Message:
    blog ja: add a draft about chunk split in static indexing

  Added files:
    ja/_posts/2016-03-27-chunk-split.md

  Added: ja/_posts/2016-03-27-chunk-split.md (+72 -0) 100644
===================================================================
--- /dev/null
+++ ja/_posts/2016-03-27-chunk-split.md    2016-03-25 21:21:04 +0900 (3ec4747)
@@ -0,0 +1,72 @@
+---
+layout: post.ja
+title: 静的構築した索引によるフレーズ検索の高速化
+description: 索引を静的構築するときにチャンクを分割することで,頻出トークンとレアトークンの混ざったフレーズ検索を高速化できるようになりました.
+published: false
+---
+
+## 静的構築した索引によるフレーズ検索の高速化
+
+### 概要
+
+静的に構築した索引を使ったフレーズ検索を高速化する方法を紹介します.データとクエリの組み合わせによっては 10 倍以上速くなるので,フレーズ検索が遅いと感じている方は試してみる価値があります.
+
+実は,一年前(Groonga 5.0.1)に頻出トークンとレアトークンを同時に検索するときの高速化が取り入れられています.しかし,静的構築した索引では効果を得ることができませんでした.本記事で紹介するのは,高速化が有効になる索引を静的に構築する方法と,どのくらい効果があるのかです.
+
+フレーズ検索の高速化については, groonga-dev における以下の投稿が参考になります.
+
+- [https://osdn.jp/projects/groonga/lists/archive/dev/2014-December/003038.html]([groonga-dev,03095] 頻出トークンとレアトークンを一緒に検索したときの性能向上パッチ)
+
+### 使い方
+
+静的に索引を構築するとき,以下の環境変数が定義されていれば,高速化が有効になるように索引が構築されます.
+
+```
+GRN_INDEX_CHUNK_SPLIT_ENABLE=1
+```
+
+また,高速化を有効にするには,以下の環境変数が必要になります.
+
+```
+GRN_II_CURSOR_SET_MIN_ENABLE=1
+```
+
+使い方は以上です.
+
+### 例
+
+まずはデータを保存するためのテーブルを以下のコマンドで作成し, `page.body` に合計 2GiB, xxx,yyy レコードのデータを `load` しました.
+
+```
+$ groonga /tmp/groonga/db
+> table_create page TABLE_NO_KEY
+> column_create page body COLUMN_SCALAR Text
+```
+
+次に,以下のコマンドで静的に索引を構築しました.
+
+```
+$ groonga /tmp/groonga/db
+> table_create idx_old TABLE_PAT_KEY ShortText --default_tokenizer TokenMecab --normalizer NormalizerAuto
+> column_create idx_old body COLUMN_INDEX|WITH_POSITION page body
+
+$ GRN_INDEX_CHUNK_SPLIT_ENABLE=1 groonga /tmp/groonga/db
+> table_create idx_new TABLE_PAT_KEY ShortText --default_tokenizer TokenMecab --normalizer NormalizerAuto
+> column_create idx_new body COLUMN_INDEX|WITH_POSITION page body
+```
+
+それから,いろいろなクエリについて検索時間を計測しました.計測に際しては,以下に示すコマンドの QUERY を入れ替えたものを使いました.
+
+```
+$ GRN_II_CURSOR_SET_MIN_ENABLE=1 groonga /tmp/groonga/db
+> select page --match_columns idx_old.body --query 'QUERY' --limit 0 --cache no
+> select page --match_columns idx_new.body --query 'QUERY' --limit 0 --cache no
+```
+
+以下の表には,各クエリについて 10 回の試行で得られたベストの検索時間を載せています.
+
+|QUERY|idx_old|idx_new|補足|
+|-----|------:|------:|----|
+|    a|   0.0s|   0.0s|TBW|
+
+以上のように,頻出トークンとレアトークンが混じったクエリについては劇的な改善が見込めます.
-------------- next part --------------
HTML����������������������������...
Descargar 



More information about the Groonga-commit mailing list
Back to archive index