*

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 詳細 限界値編(このページです)

関連記事

Google App Engine Modules in Javaを試す WebToolsPlatform編

みなさんこんにちは。 2013年の7月に、Google App Engine1.8.2がリリー

記事を読む

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

TwitterやFacebookのような有名サービスと連携したアプリを開発する場合、開発者は

記事を読む

これで怖くない Datastore のトランザクション

”トランザクション” 聞いただけで嫌厭する方も少なくないのでは? Datastore のトランザ

記事を読む

App Engine for PHP ベータ版から正式版へ

GCPBlogの記事によると App Engine for PHP(PHPアプリをGoogle Ap

記事を読む

Google App Engine コンソールの小技

みなさんご存知、GAEのコンソールにはさまざまな機能があります。 あなたがデプロイしたアプリケ

記事を読む

GAEのスケーリング 後編 <最適化の実践>

この記事では、こちらの公式ドキュメントをもとに、GAEのスケーリングの仕組みと最適化のやり方について

記事を読む

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

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

記事を読む

1つのエンティティにプロパティをいくつまで作れるか(パート2)

1つのエンティティにプロパティをいくつまで作れるか 1つのエンティティにプロパティをいくつまで

記事を読む

GAEのスケーリング 前編 <仕組みについて>

今回は、こちらの公式ドキュメントをもとに、GAEのスケーリングの仕組みと最適化のやり方について紹介し

記事を読む

GAEのautomatic scalingとbasic scalingを徹底比較!!

Google App Engine(以下GAE)(※1)は、GCPユーザならば言わずと知れた

記事を読む

PAGE TOP ↑