2

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

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

我看到了几个场景:

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

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

    • 这允许我获取所有标签及其权重
    • 这更容易维护
    • 设置属性是延迟加载的,还是我每次都会获取整个对象图?(获取一个Entry,它获取多个Tags,每个Tags依次获取多个Entries)
  3. 使用 1. 但单独维护标签及其权重的数据

    • 这在标签数据和条目中的标签之间存在同步问题

任何输入和指针将不胜感激。我认为这是一个很常见的情况,但我还没有看到任何好的解决方案。

4

2 回答 2

1

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

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

于 2009-11-17T07:57:32.537 回答
0

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

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

于 2009-11-18T08:16:01.130 回答