Google app engin の datastoreで多対多を下記ページなどを参考につくりました。
http://code.google.com/intl/ja/appengine/articles/modeling.html
グループとユーザの関係を多対多で構築しています。models.pyの内容は下記になります。
※私は、GAEをPythonとDjango(パッチ)でつくっています。
class Users(db.Model): name= db.StringProperty() group=db.ListProperty(db.Key) class Groups(db.Model): name=db.StringProperty() owner=db.IntergerProperty()
グループのオーナーがグループを削除する為のスクリプトを書こうと思っているのですが、グループを削除する際に、参加しているユーザーのgroupから、削除するグループのkeyを削除する必要があります。これについて最も効率的な方法を教えていただけますでしょうか。
GAEはデータの変更・削除に結構時間がかかります。仮に数万人所属しているグループがあったとし、このグループをオーナーが削除する場合、グループに所属しているユーザーのgroupに全てアクセスし、該当グループのkeyを削除する操作は非効率(30秒を超える可能性が十分あるの)ではないかと思っています。
宜しくお願いします。
投稿日時 - 2011-05-22 17:11:48
と、OkWebで質問した。
下記を回答いただきました。
GAEは、ちょっと特殊ですからね……。あんまりいい方法とは思えないのですが、削除するときは、単純にGroupsのownerをクリアするだけにしてはどうでしょうか(ownerが、グループの作者を示すデータですよね?)検索時に、グループのownerがないときは「そのグループは抹消済み」として表示しないようにするなど対処しておくわけですね。
そして、それとは別に、CRONなどを使って定期的にownerが空のGroupsを検索し、そのGroupsが保管されているUsersを少しずつ(一度に最大1000ずつとか)取り出してはgroupを更新していく、というのはどうでしょうか。いわば、ガベージコレクションをCRONで作るわけです。あるいは、最悪、手動で定期的に削除してもよいでしょうし……。
残念だけどそういうことなのか。