views4GCPのストレージサービスについてまとめてみた。Exp:58632メカです。TweetShareHatena注意この記事は2014年4月28日に更新されたもので、内容が古い可能性がありますのでご注意ください。1つのエンティティにプロパティをいくつまで作れるか1つのエンティティにプロパティをいくつまで作れるか(パート2)前回、1つのエンティティにプロパティをいくつまで作ることができるのか検証してみました。その結果、GAE上のデータストアではsetProperty(インデックス有りのプロパティをセット)を使うと20000個まで追加でき、setUnindexedProperty(インデックス無しのプロパティをセット)を使うと、1MB未満で使えました。ローカルでもsetPropertyで検証し、GAEでのsetUnindexedPropertyに近しい個数のプロパティを追加できることが分かりました。ところが、ローカルでのunindexedPropertyを検証していなかった為、今回検証してローカル環境とGAE環境のプロパティ最大数を比較してみたいと思います。検証方法は、前回の方法でプログラムを使用して検証しました。1MB以下(前回の表3)表1.環境別・インデックス有無のプロパティ最大数*実はGAEデータストアの20000個の制限は公式ドキュメントに書いてありました。表5から1プロパティ当たりのメタデータサイズを算出まとめローカル環境でのunindexedPropertyの検証結果ローカル環境のデータストアでsetUnindexedPropertyを使用すると、6つのケースの保存できるプロパティ最大数は表2のようになりました。95672表2.ケース別のプロパティ最大数(ローカル環境でのunindexProperty)前回の表2と表3とを比べるために、以下の通り表3を作りました。ローカル環境では、indexedProperty(インデックスを使用する場合)とunindexedProperty(インデックスを使用しない場合)のどのケースもプロパティ数は同じでした。GAE環境のプロパティ最大数という関係を保っていました。GAE環境のプロパティ最大数という関係だったので、どうもGAE環境では、ローカルでは保存しない何かをエンティティに付与しているように見えます。これだけだと物足りないと思いますので少し別の側面から細かい検証をしようと思います。前回検証用に使ったプロパティ名は統一していましたが、プロパティ名やカインド名の長さによっても変わるのではないかと想像しており、長さによって保存できる数は変わるのか検証してみたいと思います。作成できるプロパティの数は、プロパティ名の長さに影響するのかどうか作成できるプロパティの数は、カインド名の長さに影響するのかどうかカインド名とプロパティ名のケース別検証パターン前回同様、検証パターンを用意しました。プロパティ名の数字5桁は00000~99999までの数字を自動採番します。値は、コンスタントに文字a(英数字1文字)にしました。表4.カインド名とプロパティ名のケース別定義ケース1~ケース3はプロパティ名を長さ14で一定に、カインド名の長さを7、9、11と増やしています。それとは逆にケース4~ケース6はカインド名を長さ7で一定に、プロパティ名の長さを9、12、15と増やしています。プロパティ名、カインド名の長さによって保存できるプロパティ数が変化すれば、1つのエンティティにはプロパティ名やカインド名が常にエンティティの中にあることになり、データストアはプロパティ名をメタとして持っていないことになります。(RDB的じゃないですね...)検証方法こちらも前回と同様、プログラムを用いて最大値を決定します。今回の実験は、ローカルとGAE両方の環境で実験します。作成できるプロパティ数の最大個数の検証結果ケース1~ケース6について表5のような結果が得られました。表5.カインド名とプロパティ名のケース別最大プロパティ数ケース1~ケース3まで作成できる最大プロパティ数も、ケース4~ケース6まで作成できる最大プロパティ数も名前長を増加すると減少しました。減少の傾向ですが、ケース1~ケース3まで作成できる最大プロパティ数よりも、ケース4~ケース6まで作成できる最大プロパティ数の方が鋭化していました。この結果から、エンティティには常にカインド名とプロパティ名が含まれているようです。1エンティティ当たりカインド名1件とプロパティ名全件と値を持っている配分になります。表5の結果から1プロパティ当たりのサイズ(E)を算出しました。このE値にプロパティ名と値の合計バイト数(F)を引くと、1エンティティ当たりのプロパティ名と値以外のデータのバイト数が算出できました。それを表の差(E-F)にまとめましたが、1プロパティ当たり約10バイトでほぼ一定であることが分かります。10.00260944表6.1プロパティ当たりのメタデータのサイズこの一定の10バイトのサイズは、メタデータとして使用されているのではないかと思われます。まとめGAEのデータストアではインデックスを作成する場合、プロパティ数の制限がありますが、ローカル環境ではインデックスを無視する動きをします。カインド名・プロパティ名の長さによって保存できるプロパティ数も変わります。1エンティティ当たりカインド名1件とプロパティ名と値という構成になっています。文字列1プロパティ当たり10バイト分のサイズが、オーバヘッドとして使用されているようです。1プロパティ当たりのオーバヘッドとして10バイト必要そうであることが分かりました。次回(パート3)では、その検証と1カインド当たりのオーバヘッドのサイズを検証してみたいと思います。モード)で日次Backupを取得してBigQueryにインポートするGCPのストレージサービスについてまとめてみた。