guigouz
guigouz

Reputation: 1211

app engine logging to database and entity groups

In my application I have a Profile entity, which have some children, like ProfileAccount, ProfileLink, etc. They're usually updated in a transaction, like

def update_profile(key): 
  profile = db.get(key)
  accounts = db.query("SELECT * FROM ProfileAccount WHERE ANCESTOR IS :1", profile)
  # do something with accounts and profile
  profile.put()

I call it with db.run_in_transaction(update_profile, key), but I need to have an administrative log of everything that happens when the profile is updated, so I created a generic AdminLog entity which contains a reference to a Profile, the timestamp and arbitrary string data. This would be processed later to check what happened since the last user login.

The problem is as AdminLog doesn't belong to the same entity group as the Profile, I cannot add it on the same transaction, but on the other side, I don't think it would be clever to put all those logs under the same entity (Profile), as it's not essential data.

One thing I thought about would be a StringList on the Profile, that would be cleared on each login, so this way I'd have everything that happened to the profile. Do you think that's a nice approach, or maybe there's some other workaround for this kind of situation ?

Thanks in advance for any tips

Upvotes: 0

Views: 130

Answers (1)

Nick Johnson
Nick Johnson

Reputation: 101139

Using child entities seems like the best option. It ensures you can update them transactionally, and associates the changes with the entity they apply to. If you wish, you can garbage collect old admin log entries to save space.

Upvotes: 3

Related Questions