Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在App Engine中建模多对多关系?_Java_Database Design_Google App Engine_Jdo - Fatal编程技术网

Java 如何在App Engine中建模多对多关系?

Java 如何在App Engine中建模多对多关系?,java,database-design,google-app-engine,jdo,Java,Database Design,Google App Engine,Jdo,我有一个关于如何在App Engine中建模多对多关系的问题: 一个博客条目可以有许多标记,一个标记可以应用于许多博客条目 我看到了两种情况: 使用一组字符串作为博客条目的属性 这使我能够使用标记轻松地查询条目 这不允许我获取所有标记及其权重(它们应用于多少个条目) 在条目和标记类之间使用无主关系(条目类中标记的键集,反之亦然) 这允许我获取所有标签及其权重 维护起来要复杂得多 Set属性是lazyloaded,还是每次都获取对象的整个图形?(获取一个条目,它获取多个标记,每个标记依次获取

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

一个博客条目可以有许多标记,一个标记可以应用于许多博客条目

我看到了两种情况:

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

    • 这使我能够使用标记轻松地查询条目
    • 这不允许我获取所有标记及其权重(它们应用于多少个条目)
  • 在条目和标记类之间使用无主关系(条目类中标记的键集,反之亦然)

    • 这允许我获取所有标签及其权重
    • 维护起来要复杂得多
    • Set属性是lazyloaded,还是每次都获取对象的整个图形?(获取一个条目,它获取多个标记,每个标记依次获取多个条目)
  • 使用1。但要分别维护标签上的数据及其权重

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

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

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


    因此,我建议遵循“保持简单愚蠢”的规则;使用最简单有效的方法。“Blogentry”对象中的字符串列表听起来相当健壮。即使很容易出现竞争情况(人们并行进行更新,覆盖彼此的更改),但您有多少人编辑同一篇博文?

    我决定选择选项3,以保持一个单独的标签列表及其权重


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

    您好,谢谢您的回答。你是对的,这就是我现在所做的(选项1)。不幸的是,这不允许我轻松获得所有标记及其权重的列表(需要此列表,因为我希望有一个标记云,并且我希望自动完成向新条目添加标记)。在内存中计算这个列表似乎违反直觉,更不用说不可缩放了,但也许这就是需要做的事情。