Yes, agree. That is the right solution for deletion. Thank you. But what about creation of a new Game? How can I guarantee that the team1 and team2 are valid (still in the datastore) when I create a new Game?
On Apr 13, 2:40 am, djidjadji <[email protected]> wrote: > If a Team has a lot of Games you don't have enough time to delete them > all in 30 seconds. > > You must use a method that always work, even in the event that the > datastore is giving troubles or is in maintenance (no write or delete > possible). > > What you could do is mark the Team as being deleted, add an extra > field to the model. > Give the operator feedback that the Team is successfully marked as > deleted. Read the Team object back and check the deleted attribute. > > When you want to create a Game filter for teams not marked for delete. > > With a cron job: > > 1) Find a Team marked for delete. markedTeam = > Team.all().filter('deleted =',True).get() > 2) Find Games for this Team, in team1 or team2 attribute, fetch at most 10 > games > 3) if Games found: delete Games > if no Games Found: delete Team > > This way you will eventually delete all the Games and the Team. > > 2009/4/13 GMailingList <[email protected]>: > > > > > Ok maybe I don't absolutely need it to delete a team but what about... > > > 1) when I'm creating a new game - team1 or team2 could be deleted as > > I'm creating a new game, then the game will have a team that does not > > exist > > > OR > > > 2) for arguments sake, I need the deletion of a team (and all the > > games it's in) to be atomic. What you're suggesting can fail at > > anywhere between 1 and 4. > > > On Apr 12, 4:35 pm, djidjadji <[email protected]> wrote: > >> Start with answering the question: Do I need a transaction? > > >> I don't think you need it to delete a team. > > >> Every Team and every Game are root entities, no child objects. > > >> When you want to delete a Team > >> 1) find all Games that have the Team in attribute team1 > >> 2) delete these Games, maybe delete in groups of 10 to 20 per request > >> 3) find all Games that have the Team in attribute team2 > >> 4) delete these Games, maybe delete in groups of 10 to 20 per request > >> 5) delete the Team object > > >> You can use the method from [1] to delete the Games > > >> [1]http://code.google.com/appengine/articles/update_schema.html > > >> 2009/4/13 ae <[email protected]>: > > >> > Does anybody else find transactions very restricting? How do I solve > >> > this problem? Here is my data model... > > >> > Team(db.Model): > >> > name = db.StringProperty() > > >> > Game(db.Model): > >> > team1 = db.ReferenceProperty(Team, collection_name='game1_set') > >> > team2 = db.ReferenceProperty(Team, collection_name='game2_set') > > >> > ... if I delete a team, I want to delete all the games associated with > >> > it as well so I need to put the delete operation in a transaction. > >> > But how would I setup the entity group? > > >> > setup 1) Team as parent of Game - but there can be only 1 parent and > >> > team1 and team2 should both be parents - DOESN'T WORK > >> > setup 2) Game as parent of Team - then that would mean each team can > >> > only play 1 game? DOESN'T WORK > >> > setup 3) create a 3rd entity and let that be the parent of both Team > >> > and Game - but then all teams and games would be in the same entity > >> > group - is this my only option? > > >> > Thanks. > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en -~----------~----~----~----~------~----~------~--~---
