【问题标题】:GAE datastore - How to deal with multiple namespace at same timeGAE 数据存储 - 如何同时处理多个命名空间
【发布时间】:2014-11-22 07:53:54
【问题描述】:

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

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

层次结构

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。 如果我需要对实体组(父键)执行此操作,如何绕过并发查询限制?

【问题讨论】:

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


    【解决方案1】:

    如果您询问应用引擎数据存储是否支持跨命名空间实体,答案是否定的。实体存在于单个命名空间中(嵌入在实体键中的命名空间)。可以将实体属性值作为实体属性值存储在不同的命名空间中,但我对 Objectify 的了解还不够,无法说明 Objectify 是否支持这一点,或者您是否需要绕过 Objectify 才能使用较低的级 API。

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

    【讨论】:

    • Objectify 不支持这个。我正在开发自定义映射器。
    • 我似乎能够使用 objectify 将具有 Refs 的实体存储到其他命名空间中的实体,但有一个例外:你不能在另一个命名空间中拥有父级......命名空间的前缀是键和父键是您的键的一部分,因此孩子将始终跟随父母(这可能是意料之中的)。
    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2018-10-08
    • 2020-08-02
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2021-08-02
    相关资源
    最近更新 更多