これをせめて500以上操作できるようにしたいのですが、どの方法が効果的でしょうか?
モデルを分割して検索条件だけのモデルを作成他のデータはReferencePropertyで紐付けする
モデルを分割して検索条件だけのモデルを作成他のデータは自前のIDで紐付けする
インデックスを整理
_key_で検索しあとから順に取り出す
他の方法
データの分割は結果リストを作成する手間を考えると極力避けたいです
またReferencePropertyで紐付けすると検索に成功しても子データにアクセスした瞬間にメモリが一気に増えるのでしょうか?
インデックスの整理だけでどの程度なんとかなるものでしょうか?
試せばわかることではありますが、どの順番で何を試したらいいかくらいの方向性が見えるとありがたいです。
何かアドバイスをお願いいたします。
メモリエラーが出るということは、
Datastoreから返ってきたデータが大きすぎるということですよね。
なので、インデックスは関係なく、おそらく1つのエンティティ(モデルの実体のことです)の
サイズ自体が大きいものと思われます。
よって
・エンティティのサイズ自体を小さくする(分割など)
・一度に少しずつエンティティを処理する
のいずれかの方法を取るしかないと思います。
あるいは、その処理がユーザのアクセスと関係ないバックグラウンドの処理であれば、
メモリの多いBackendを使えば、大丈夫かもしれません。
参考:
http://code.google.com/intl/ja/appengine/docs/python/config/backends.html#Instance_Classes
対策は思いつくものの常識的な手段や裏技的なものを知らないので質問させていただきました。
ありがとうございました。
> 参考:http://code.google.com/intl/ja/appengine/docs/python/config/backends....
まもなくリリースされる1.6.1から、フロント側のインスタンスも
クラスを選べるようになる可能性があります。
そうすると、バックエンドを使わないでも解決できるかもしれません。