carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

Google App Engineのテーブル

Google App Engineを今回利用しているのですが、Datastore Write Operations が制限にすぐ引っかかってしまいました。下記のような状況です。

イメージ 1

画面は、GoogleAppEngineのサイトで、自分のアプリケーションを選択して、dashboardで確認します。

この状況になると、Datastoreへの書き込みが制限されて、24時間経過しないと再書き込みができません。右上にリセットされるまでの時間が記述されているので、この例では、18時間後まで書き込みができないことになります。(他の読み込みは大丈夫)
※勿論、制限を解除するために、有料モードで、制限を解除しても良いのですが、無料前提で考えます。

さて、単位が0.05Million Opsとあります。つまり、50,000 Opsです。(Millionとあるから多いように思えましたが、0.05ですからね・・・)"Ops"は何か?というと、よくわかりません。Googleさんが定めた単位です。

DataStoreに書き込みデータ量を変化させて、Opsの増減を確認してみると、大凡の値が見えてきました。
1レコードに保存する項目(カラム)数に応じて変化し、そのカラム内のデータ量や、文字・数値の違いでは変化しない様子でした。たとえば、1レコードに、「ID」「日付」「タイトル」「コメント」「ユーザID」の5項目を保存するとした場合、2×項目数(5)=10程度(単位:Ops)になります。(目安です。)

つまり、この場合、一日に5000レコードを保存するとそれ以上保存することができません。(なんて少ないのだろう。)

今回、おさんぽガイガーの測定結果を共有することを考えた場合に、1回の測定で最大1000箇所の記録が行えるので、単純にその1000箇所のデータを5件共有したら、もう共有ができません。
1000(箇所)×10(Ops)×5(件)=50,000 Ops

そこで、データの構造を見直す必要がでてきました。
※勿論、一人で使うのであれば、大丈夫ですが、複数の人がアップロードすることを考えると、問題があります。

そこでどうするか?
仕方が、ないので、Blob Store dateを利用して、測定した結果をファイルとしてBlobのデータに保存することにしました。
代表的な情報(ユーザ名とか、タイトルとか、測定日とか)は、DataStoreで表形式で保存し、測定したデータはそれにひもづくデータ(ファイル)として保持することにします。これによる弊害は、細かい集計やデータの検索を行うためには、そのファイルを開いて処理しなきゃいけないということ。とりあえず、今は他の端末と全体で共有することを考えているだけなので、その後はまた考えることにします。

Google App Engineのサービスを利用する際には、注意が必要ということで。
先週、完成した!とおもったら、こんなので再度テーブルを見直す必要が出てしまいました。