Google App EngineでのDatastore使用量見積もりは注意が必要

先日セッションデータを消したかったのは、Datastore使用量が1GBを超えて一日0.01$の課金がかかってたからなのです。日曜日くらいに無事消えました。
Google App Engine/Javaでセッション情報を定期的に消す処理
130万件を消す処理に5日以上かかった計算に。もちろん、もう少しちゃんと組めばもっと早く終わると思うのですが、それはつまり、130万件を消去する処理を書くには単純なコードでは無理ということです。※急いでなかったので30分に13回程度の処理しか行ったためで、ちゃんと処理をすると3時間かからないくらいにはなりそうです。(23:08追記)


まあ、日数がかかるのはいいとして。
セッション情報がたまってるときのエンティティサイズはこのように360MB程度になっていました。

ただ、このときデータストア使用量は1GBを超えて、0.01$の課金がかかっています。


これが、セッション情報を消すとエンティティサイズは60MB程度まで減りました。300MB減ったということになります。

このとき、データストア使用量は0.3GBまで減ってます。700MB減ったということです。つまり、実際のエンティティサイズの倍以上の容量を食っていたということになります。(※おそらくインデックスデータです 23:09追記)


セッション情報を消したあとのデータですが、エンティティサイズ自体もMetadataが多く容量を食って、実データは1/3以下になっています。(※エンティティごとの保持データが少なかったのでMetadataの割合が大きくなっています 23:09追記)

つまりDatastore容量は実データの5倍になっているということです。プロパティ名を短くしてmetadata容量を減らしたり、無駄なインデックスを作らないようにしたり、ひとつのエンティティにデータをまとめるようにすることで、Datastore容量を減らすことができるわけですが、何も工夫しなければ実際のデータの数倍のDatastore容量を食ってしまうということは考えておいたほうがいいと思います。