「知る人ぞ知る」化してるっぽいので、書いておきます。
google.appengine.ext.db.Model.put()
google.appengine.ext.db.Model.delete()
datastoreのレコードを更新するときには、
db.Modelのput/deleteを使う場合がほとんどだと思いますが、
これって遅いですよね?
datastoreとの通信は、xml-rpcっぽいので、
ほとんどはプロトコルのオーバーヘッドだと思います。
たとすれば、通信回数を減らせば良い?
そうです。一括書き込み方法があります。
って言うか、ドキュメントを熟読すれば書いてある話なんだけど。
「一つ以上の」って書いてあります。
ハイ。もう判りましたね。
db.Modelをその場でputしないで、
- list.appendしておく。
- まとめて、db.put(list) する。
これだけで劇的に速くなります。
もう劇的です。500レコードが2秒で入ります。
「な!」と言っちゃうぐらいです。
ただしこの場合だと、db.Model.putは通らないので、
独自にputをオーバーライドしてる場合だと、
都合が悪いことがあります。
ちなみに筆者は、まったくの別件の研究で、
SDKのソースを眺めていて、本件を発見しました。