[groonga-dev,04536] Re: JSONB や 配列フィールドについての pgroonga インデックス作成時間および、jsonb のフェッチについて

Back to archive index

Kouhei Sutou kou****@clear*****
2017年 11月 25日 (土) 15:26:40 JST


須藤です。

In <009601d3632c$19f083e0$4dd18ba0$@mirror.ocn.ne.jp>
  "[groonga-dev,04533] JSONB や 配列フィールドについての pgroonga インデックス作成時間および、jsonb のフェッチについて" on Wed, 22 Nov 2017 09:51:58 +0900,
  内山敏郎 <toshio_uchiy****@mirro*****> wrote:

> 〇質問1:インデックス作成時間

同じデータ量だけどインデックスの作成時間が、

  * textに全部詰め込むと20分
  * jsonbでJSONの配列として100個にわけて詰め込むと40分
  * text[]に100個にわけて詰め込むと100分以上

になるけど、妥当?という話ですよね。

textとjsonbの比較ですが、jsonbの方がインデックス化している情
報が多い(たとえば、JSON内のどこにあるデータか、という情報も
インデックス化している)ので遅くなるはずです。ただ、2倍くら
いになるのが妥当かというとどうなんだろう、試さないとわからな
い、という感じです。

text[]がすごく遅いのは妙だなぁと思いました。

↓のようにcontentカラムだけにして実行しても再現しますか?

create table subtitled (content text[]);
create index pgroonga_subtitled on subtitled using pgroonga( content );
insert into subtitled ...;

これでも再現するならこちらでも確認してみたいので、データを提
供してもらえないでしょうか?

また、↓のようにデータ投入後にインデックスを作成するとどうな
りますか?

create table subtitled (content text[]);
insert into subtitled ...;
create index pgroonga_subtitled on subtitled using pgroonga( content );

> 〇質問2:検索結果でデータ量の多いjsonb フィールドのフェッチ時間
> 
> 上記の subtitlec で、content &@ 'アルゴリズム' の検索結果がおよそ1700件
> です。この検索結果をフェッチすると45秒かかりました。explain analyze
> で時間を測定すると(フェッチしないと)数十ミリ秒です。
> 加えて、&@~ 'アルゴリズム 検索' として 4件まで絞り込むと
> フェッチしても1秒かかりません。
> 
> この測定傾向も、理論的に正しいと考えられますでしょうか。

該当レコード1700件のidを記録しておき、

  SELECT content WHERE id IN (...idのリスト...);

を実行した場合も45秒くらいかかりますか?であれば、そのくらい
かかって普通です。

PGroongaは数値や文字列など多くの型に対してはインデックスオン
リースキャンをサポートしており、PostgreSQLのストレージからで
はなくPGroongaから実データを返しています。この場合は、
PostgreSQLからデータを返すときよりも速いはずです。
(そういえばベンチマークをとったことがなかったので誰かとって
まとめて欲しい。。。)

一方、jsonbではインデックスオンリースキャンをサポートしてい
ません。これは、PGroongaはjsonbの元データを保存していないか
らです。インデックスオンリースキャンをサポートしていないので
クライアントにjsonbのカラムの値を返すのは常にPostgreSQLです。
なので、PostgreSQLがデータを返すのに45秒くらいかかるなら、
たとえPGroongaのインデックスを使って検索したとしても同じくら
いかかります。


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

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
OSS開発支援サービス:
  http://www.clear-code.com/blog/2016/6/27.html




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