App引擎多对多数据建模

时间:2009-11-17 07:39:44

标签: java database-design google-app-engine jdo

我有一个关于如何在App Engine中建模多对多关系的问题:

Blogentry可以有很多标签,标签可以应用于许多博客条目。

我看到了几个场景:

  1. 在博客条目中使用一组字符串作为属性。

    • 这使我可以使用标记
    • 轻松查询条目
    • 这不允许我获取所有标签及其权重(它们适用的条目数量)
  2. 使用Entry和Tag类之间的无主关系(Entry类中的标记键集,反之亦然)

    • 这允许我获取所有标签及其权重
    • 维护
    • 更加复杂
    • 是否设置了属性延迟加载,还是每次都会获取整个对象图? (获取一个条目,它可以获取多个标记,每个标记依次获取多个条目)
  3. 使用1.但单独维护标签及其重量的数据

    • 这在标签数据和条目
    • 中的标签之间存在同步问题
  4. 任何输入和指针都将不胜感激。我认为这是一个非常常见的情况,但我还没有看到任何好的解决方案。

2 个答案:

答案 0 :(得分:1)

与许多其他数据库管理系统一样,App Engine数据存储区本身不支持多对多关系,但可以通过“联结表”解决。但是,由于App Engine的查询语言不支持联接,因此在您的应用程序中使用这将非常痛苦。谷歌的BigTable架构实际上不鼓励这样做,因为分布式连接效率不高。

所以,我建议采用“保持简单愚蠢”的规则;使用最简单的东西。 “Blogentry”对象中的字符串列表听起来相当健壮。即使它容易出现竞争条件(人们同时进行更新,覆盖彼此的更改),但是你有多少人在编辑相同的博客帖子呢?

答案 1 :(得分:0)

我决定使用选项3.来维护一个单独的标签列表及其权重。

这似乎工作正常,虽然插入/更新代码有点混乱。