GAE数据存储 - 如何同时处理多个命名空间

时间:2014-11-22 07:53:54

标签: java google-app-engine google-cloud-datastore

如何设计具有命名空间的分层实体,并在单个请求中将其与默认命名空间一起使用?

默认命名空间用于管理目的,例如保存有关每个命名空间的admin的信息。

层次

User (Namespace: default)
  - Organization (Namespace: default)
    - User (Namespace: name of organization)

要点:

1。 如何在单个请求中使用多个命名空间?   - 可用

2。 应该在NamespaceManager.set()之前,还是在数据存储区操作之前调用Key.create

-----更新----- Key key = KeyFactory.createKey('Test', 100) NamespaceManager.set('NS_NEW') Key nsKey = KeyFactory.createKey('Test', 100) NamespaceManager.set(null) [key: key, nsKey: nsKey];

结果:

{"key": {"kind":"Test","appId":"gaetest","id":100,"name":null,"parent":null,"namespace":"","complete":true},"nsKey":{"kind":"Test","appId":"gaetest","id":100,"name":null,"parent":null,"namespace":"NS_NEW","complete":true}}

根据结果,Key持有命名空间。 (并且客观化成为问题......)

3。 如果我需要使用实体组(父键)执行此操作,如何绕过并发查询限制?

1 个答案:

答案 0 :(得分:2)

如果您要询问应用引擎数据存储区是否支持跨命名空间实体,答案是否定的。实体位于单个命名空间(嵌入在实体键中的命名空间)中。可以将实体属性值作为实体属性值存储在不同命名空间中的实体的关键字,但我不太了解Objectify是否支持Objectify支持,或者您是否支持需要绕过Objectify以使用较低级别的API。

如果你问是否可以在HTTP请求中使用多个命名空间,答案显然是肯定的,因为处理程序在默认命名空间中启动,直到命名空间被处理程序中的代码更改为止。如果您要询问是否可以在数据存储区查询中使用多个名称空间(例如,连接来自不同名称空间的数据),答案(据我所知)是否定的。