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

Back to archive index

内山敏郎 toshio_uchiy****@mirro*****
2017年 11月 26日 (日) 14:00:10 JST


須藤さま

 お世話になります。内山です。


 最初に、元のわたくしのメールの書き方が悪かったことを
お詫びします。
 元メールの時間測定は、テーブルを create して、データを
登録してからの、インデックスを作る時間のみを測定しました。
インデックスを定義してからのデータ投入時間ではありません。

〇その1

>textとjsonbの比較ですが、jsonbの方がインデックス化している情
>報が多い(たとえば、JSON内のどこにあるデータか、という情報も
>インデックス化している)ので遅くなるはずです。

この情報をいただければ十分です。2倍になるかどうかの
定量的なところは、こちらの測定値で考えます。測定が
間違った方向でなければ良いです。

〇その2

> create table subtitled (content text[]);
> create index pgroonga_subtitled on subtitled using pgroonga( content );

> contentカラムだけにして実行しても再現しますか?

この件ですが、今、実行してみたところ、content カラムだけにしても
100分を超えました。自動アボートするかどうかは、3時間くらいみてみないと
分からないと思います。

となると、データの提供ということかと思いますが、お役に立つなら
データ提供させていただきます。データは 19GB です。この前と同じで
psql-d databasename -h hostname -U username -f filename.sql すれば
こちらと同じテーブルが、subtitled という名前で生成されるファイルです。
複数カラムのテーブルです。もしよろしかったら、別メールで
ダウンロード URL をお知らせしたいのですがよろしいでしょうか。

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

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

この件ですが、元からデータ投入後にインデックスを作成しています。

〇その4

>該当レコード1700件のidを記録しておき、
>
>  SELECT content WHERE id IN (...idのリスト...);
>
>を実行した場合も45秒くらいかかりますか?であれば、そのくらい
>かかって普通です。

この実験は、1700個の id を記録するのに手間がかかりすぎるので
やってません。

>PGroongaは数値や文字列など多くの型に対してはインデックスオン
>リースキャンをサポートしており、PostgreSQLのストレージからで
>はなくPGroongaから実データを返しています。この場合は、
>PostgreSQLからデータを返すときよりも速いはずです。
>(そういえばベンチマークをとったことがなかったので誰かとって
>まとめて欲しい。。。)
>
>一方、jsonbではインデックスオンリースキャンをサポートしてい
>ません。これは、PGroongaはjsonbの元データを保存していないか
>らです。インデックスオンリースキャンをサポートしていないので
>クライアントにjsonbのカラムの値を返すのは常にPostgreSQLです。
>なので、PostgreSQLがデータを返すのに45秒くらいかかるなら、
>たとえPGroongaのインデックスを使って検索したとしても同じくら
>いかかります。

須藤さまに問い合わせても、jsonb カラムのフェッチは PostgreSQL
でやっているので、正確なところは、わからないということですね。
この件、了解しました。

〇その5

Pgroonga.log の件は別メールで打ち合わせをお願いしております。

よろしくお願いします。

-----Original Message-----
From: groon****@lists*****
[mailto:groon****@lists*****] On Behalf Of Kouhei Sutou
Sent: Saturday, November 25, 2017 3:27 PM
To: groon****@lists*****
Subject: [groonga-dev,04536] Re: JSONB や 配列フィールドについての pgroonga
インデックス作成時間および、jsonb のフェッチについて

須藤です。

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 mailing list
groon****@lists*****
https://lists.osdn.me/mailman/listinfo/groonga-dev




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