内山敏郎
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