app引擎记录到数据库和实体组

时间:2010-12-13 17:24:06

标签: google-app-engine bigtable

在我的应用程序中,我有一个Profile实体,它有一些子项,如ProfileAccount,ProfileLink等。它们通常在事务中更新,如

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()

我用db.run_in_transaction(update_profile,key)调用它,但是我需要有一个管理日志,记录更新配置文件时发生的所有事情,所以我创建了一个通用的AdminLog实体,其中包含对配置文件的引用,时间戳和任意字符串数据。稍后将对此进行处理以检查自上次用户登录以来发生的情况。

问题是因为AdminLog不属于与Profile相同的实体组,我无法在同一个事务中添加它,但另一方面,我认为放置所有这些日志并不聪明在同一实体(简介)下,因为它不是必要的数据。

我想到的一件事就是Profile上的StringList,它会在每次登录时被清除,所以这样我就会知道配置文件发生了什么。你认为这是一个很好的方法,或者在这种情况下还有其他的解决方法吗?

提前感谢任何提示

1 个答案:

答案 0 :(得分:3)

使用子实体似乎是最好的选择。它确保您可以在事务上更新它们,并将更改与它们应用的实体相关联。如果您愿意,可以垃圾收集旧的管理日志条目以节省空间。