代码之家  ›  专栏  ›  技术社区  ›  Tony the Pony

请帮助我理解GAE数据存储中的实体层次结构

  •  4
  • Tony the Pony  · 技术社区  · 15 年前

    Google App Engine数据存储允许每个实体 父实体 ,基本上是一种形成 实体层次结构 . 例如,一个 Employee 地址如下:

    Company#521/Department#5/Employee#3
    

    实体id仅在具有相同父级的实体中是唯一的,因此需要完整的实体路径来唯一地寻址它。

    到目前为止,还不错。

    但是 什么时候 我应该用这种方式对父子关系建模,而不是像在传统数据库中那样依赖实体中的基本引用属性吗?

    我能想到的唯一原因是避免数据存储查询中缺少连接。我只能使用我正在检索的实体的属性来筛选查询,也只能使用实体层次结构中任何级别的父实体的属性来筛选查询。

    使用此功能还有其他原因吗?

    数据存储文档表明,属于同一层次结构的实体被视为 实体组 ,并且同一实体组中的实体具有序列化的写入访问权限。那到底是什么意思?是否意味着如果我的应用程序的一个线程正在更新 Department#5 ,另一个正在写入的线程 Employee#3 必须等待此更新完成吗?

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  2
  •   systempuntoout    15 年前

    您应该仅在需要定义事务性域时使用实体组。在App Engine上,事务只能修改单个实体组中的实体,即具有相同父级的实体。如果不需要两个实体之间的事务完整性,则它们不应位于同一实体组中。

    如果您绝对需要全局事务,您可以自己实现它们-请参见 my blog post on the subject 举个例子。实际上,一小部分应用程序实际上需要全球交易。

        2
  •  1
  •   systempuntoout    15 年前

    的典型用法 起源 功能而不是 引用属性 是为了 transactions .
    Google App Engine允许在同一个实体上进行交易 entity group ,即具有相同父级的一组实体。