从app engine datastore中选择子类 - 优缺点

时间:2010-03-03 04:04:02

标签: google-app-engine google-cloud-datastore class-hierarchy

我将模型设置如下:

class Day(db.Model):
    date = db.DateProperty()
    total = db.FloatProperty()

class Event(db.Model):
    desc = db.StringProperty()
    amount = db.FloatProperty()

层次结构如下:用户>日>事件(用户有天。天有事件。)

当用户登录时,我想选择他们的日期(按照日期的范围说),然后每天我想获得他们的活动。我们只是说这些现在显示在列表中。

我应该使用parent属性来创建显式实体组吗?或者我应该在一天为用户添加引用属性,并在一天的事件中添加引用属性吗?

每种方法的优缺点是什么?性能考虑?可扩展性考虑?而且,我将如何以最佳方式查询。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您需要在事务上一起更新日期和事件模型(例如,'total'字段需要随每个事件更新),请使用实体组。否则,请使用参考属性。

为了最有效地选择日期范围内的所有事件,您最好的选择是在某种程度上进行非规范化,并在事件上添加“日期”属性。然后,您可以在给定范围内对给定用户的所有事件进行查询,并根据需要从这些事件中获取Day实体。