如何将GAE数据存储区事务与多对多关系一起使用?

时间:2010-10-24 19:01:09

标签: java google-app-engine jdo

我有一个包含Vendor个对象和VendorCategory个对象的数据模块。每个供应商都有多个类别,每个类别可以有多个供应商。 我需要列出给定类别下的所有供应商,以及给定供应商下的所有类别。

主要操作在供应商身上,因此我根据供应商的编辑操作编写代码来更新/删除VendorCategory个对象。

喜欢这些操作是事务性的:即,如果供应商创建/删除/编辑通过,则供应商类别更新其引用计数,而不是其他情况。但我把事情设置为无主的多对多关系,所以AFAIK不可能使用交易,因为它们位于不同的实体组中。

有没有更好的方法来建立这种关系?我是否需要吮吸它并与野兽的非交易性质生活在一起?我已经考虑过使用任务队列来定期清理关系,这是最好的方法吗?

2 个答案:

答案 0 :(得分:2)

当您对VendorCategory进行更改时,添加transactional task以更新Vendor。仅当数据存储写入成功时才会添加任务。处理任务内自己事务中类别的更新和删除。

您可能需要查看Google IO 2010中的“Building high-throughput data pipelines with Google App Engine”。特别是物化视图中的内容。

答案 1 :(得分:0)

我最近撰写了一篇博客文章,描述了不同的做法many-many relationships in App Engine。您选择哪种方式取决于您的情况,以及“所有权” - 例如,如果供应商“拥有”其类别列表,您可以最简单地将其作为列表存储在供应商实体上。