*

Search API詳細解説 Part6「Search API 詳細 限界値編」

公開日: : 投稿者: GAE

みなさん、こんにちは。
前回はSearch APIの反映速度について調べてみましたが、いかがだったでしょうか?
今回でSearch API詳細解説のPart6を迎え、このシリーズは最終回となります。
最終回の今回はSearch APIの「限界値」を調べてみます。

タイトル
Part1 Search API 概要説明
Part2 Search APIの使い方 登録・削除編
Part3 Search APIの使い方 検索編
Part4 Search API 詳細 検索性能編
Part5 Search API 詳細 反映速度編
Part6 Search API 詳細 限界値編(このページです)

 

1MB制限を検証してみる

それでは、早速1 Documentの容量の限界である1MBについて調べます。
※文字列のbyteサイズを調べるときのエンコードは「UTF-8」です。

まずは、テキストフィールドに保存するデータのサイズとしては問題のないデータを登録してみます。
フィールド名「field1」という名前のテキストフィールドに半角文字「a」を1,048,575文字を登録してみましょう。
サイズは1,048,575byteなので問題はないはずです。

フィールド名 備考
ID 1 Document ID
field1 aaaaaaa………………….aaaaaaaaaa フィールド名文字数:
6文字
フィールド値文字数:
1,048,575文字

※登録Documentの構造
Documentの登録結果はput時に次のエラーが出ました。

java.lang.IllegalArgumentException: Document length 1048609 is greater than the maximum 1048576 bytes

1 Documentのサイズが1,048,576 byteを超えていると怒られてますね。
エラーの文面を見ると、Documentのput時のサイズが1,048,609 byteになっているようです。
フィールド値のサイズよりも34 byte大きくなっていますね。
フィールド値のサイズだけであれば、1,048,575 byteのはずですので、ギリギリ1MBは超えないはずです。
フィールドの値以外の何かが加算されているようですね。

 

試しにフィールド名「field1」を「F」に変更して、再度登録してみましょう。

フィールド名 備考
ID 1 Document ID
F aaaaaaa………………….aaaaaaaaaa フィールド名文字数:
6文字
フィールド値文字数:
1,048,575文字

※再登録Documentの構造

再度登録してみると、次のエラーが出ました。

java.lang.IllegalArgumentException: Document length 1048604 is greater than the maximum 1048576 bytes

エラーの内容は同じですが、putしたDocumentのサイズが先程より5 byte小さくなっていますね。
フィールドの値は変えていませんので、フィールド名「field1」から「F」に変更した半角5文字分が純粋に減っているようです。

Documentサイズ比較表

パターン Documentサイズ(byte)
フィールド名「field1」の場合 1,048,609
フィールド名「F」の場合 1,048,604

 

この結果を見る限り、フィールド名もDocumentのサイズに含まれているようですね。
推測ですが、フィールド名だけでなく、おそらく各フィールドのFieldTypeやLocaleの値などの文字列もサイズにカウントされていると思われます。

※半角文字「a」を1,048,577文字を設定すると、Fieldに値を設定する時に次のエラーが出ます。

java.lang.IllegalArgumentException: Field text longer than maximum length 1048576

1フィールド10KBのフィールドをいくつまで持てるのか、検証してみる。
次は、1フィールドに10KBのテキストフィールドをいくつまで持てるのか、試してみましょう。
10KBは、半角文字に換算して10240文字。1フィールドに持つには十分な検索フィールドだと思います。
設定値のサイズだけで計算しますのと、1 Documentに102フィールドは持てるかと思います。
Documentのフィールドは下記のようになるかと思います。

フィールド名 ID field1 field2 ……….. field101

field102

1 aaa…aa aaa…aa ……….. aaa…aa

aaa…aa

?※値の「aaa…aa」は各フィールド10240文字入っています。

結果は、102フィールドまで持てました。予想と同じでしたね。
103フィールドを登録すると、

java.lang.IllegalArgumentException: Document length 1056787 is greater than the maximum 1048576 bytes

と、1MB制限を超えたと怒れますので、1フィールド10KBのフィールドでしたら、102フィールドまで持つことができるということがわかりました。

今回でSearch API詳細解説は最終回となります。
全6回のシリーズでしたが、いかがだったでしょうか?
シリーズとしてはこれで終わりですが、今後は読んでくださった方の要望や依頼を取り入れて、不定期でも調査して、この場で公開したいと思いますので、ご意見いただければと思います。

読んでいただきありがとうございました。

Search API詳細解説シリーズ

タイトル
Part1 Search API 概要説明
Part2 Search APIの使い方 登録・削除編
Part3 Search APIの使い方 検索編
Part4 Search API 詳細 検索性能編
Part5 Search API 詳細 反映速度編
Part6 Search API 詳細 限界値編(このページです)

関連記事

東京リージョン内でのGAE・GCS・GCE間の通信はこのくらいだった

11月8日に Google Cloud Platform にて待ちに待った日本リージョンがリ

記事を読む

Search API詳細解説 Part1「Search API 概要説明」

Google App Engine(以降GAE)に全文検索サービスであるSearch APIが正式リ

記事を読む

Search APIの「Faceted Search」を使ってみた

Search API詳細解説シリーズは完結しましたが、2015年2月19日のAppEngine SD

記事を読む

たったの15分でできるGAE/GO入門 標準APIその1

知っておけば必ず開発が楽になる! GAE/Go入門の本連載ですが、前回は第一弾として「PaaS最前

記事を読む

GAE/GOでTwitter Botを作ってみる~後編~

今回のapps-gcpは「GAE/GOでTwitter Botを作ってみる」の後編記事です。

記事を読む

Cloud Loggingの利用方法

はじめに 本記事はGoogle Cloud Platformの公式ページで公開されている「Goog

記事を読む

AppEngineでTwilioを試してみた(基本編)

AppEngineでTwilioを試してみた(基本編) AppEngineでTwilioを試し

記事を読む

GAE負荷テスト その1「Hello World!」

2011年11月にGAEのプレビューが終わり、早数ヶ月経ちました。 これからGAEでの開発に乗り出

記事を読む

Datastoreの仕組み ~Consistencyについて~

はじめに スケーラビリティと可用性が高いと言われているGoogle Cloud Datastore

記事を読む

Google App Engine Modules のScalingを試す

みなさんこんにちは。 前回の記事では、GAE Modulesの簡単なサンプルを配備し、動作を確

記事を読む

PAGE TOP ↑