谷歌应用引擎中的数据库设计

时间:2010-04-18 12:28:36

标签: google-app-engine database-design google-cloud-datastore

我正在设计一个基于列表的简单项目。我们的想法是以一种层次的方式定义项目下的任务(没有工作流 - 只需“完成任务”或不需要。)。即,每个任务具有多个任务,并且该任务可以具有其他多个任务。如果该项目下的所有任务都已完成,则可以说项目已完成。 ,我想使用refrenceproeperty创建hirarchy,但无法找到简单的方法(找到项目的所有子项并检查天气是否完成不需要超过30秒)。检测项目是否完整。如何为这样的工作设计数据库?而且,如果我需要复制项目以定义另一个项目,如何复制分层数据?

2 个答案:

答案 0 :(得分:3)

与其他nosql数据库一样,App Engine数据存储的最重要的理念是在写入时进行工作,而不是在读取时进行。考虑到这一点,您可以像亚当建议的那样使用父关系,并在每个节点上保留一个“不完整计数”,它计算尚未完成的直接子节点的数量。标记节点完成时,减少其父节点的计数;如果这导致它完成,移动到其父级,依此类推。使用这样的结构,您可以立即显示任务是否完成。

答案 1 :(得分:0)

最好通过将任务实体的设置为它所属的任务实体或项目实体来实现任务层次结构。

我认为找出项目的所有子项是否完整的技巧是使用ANCESTOR查询。

如果要创建任务记录以使其父级设置为它们所属的任务或项目,则应该能够编写如下内容:

all_done = db.Query().ancestor(project_entity).filter('complete = ', False).count()
if all_done > 0:
    #Not all done
else:
    #All done