AppEngine NDB:如何正确应用祖先?

Posted

技术标签:

【中文标题】AppEngine NDB:如何正确应用祖先?【英文标题】:AppEngine NDB: How to apply ancestors correctly? 【发布时间】:2014-12-13 05:16:16 【问题描述】:

我正在考虑将 GAE + NDB 用于一个新项目。我对祖先仍然有点困惑,所以我可以就如何正确使用它们提出一些建议。

我的情况: 该应用程序将处理工厂的生产订单,我们计划拥有不同的客户。 为了减少管理任务,我们将让所有客户端使用相同的应用程序和相同的数据存储(拥有单独的应用程序 + 数据存储将是客户端之间的一道很好的中国墙,但管理起来却是一场噩梦)。

我需要实现一种方法来隔离客户端之间的数据。客户端 A 应该无法访问此应用上任何其他客户端的任何数据。

那么是否建议在数据存储中使用祖先来分离来自不同客户端的数据? 我认为在这种情况下,我可以拥有诸如 ClientA-Products、ClientA-Orders、ClientB-Products、ClientB-Orders 等祖先键。或者甚至可能所有事务都由客户端键入:例如 ClientA、ClientB..?

或者在每个实体中都有一个属性将实体与客户端相关联更好? 在这种情况下,“产品”和“订单”实体都有一个属性“公司”,应用程序必须在每次写入时填写该属性并包含在每个查询中。

提前感谢您的想法!

【问题讨论】:

【参考方案1】:

多租户非常适合您的用例。

from google.appengine.api import users

def namespace_manager_default_namespace_for_request():
    # assumes the user is logged in.
    return 'client_id'

阅读更多关于它的信息here。

【讨论】:

嗨,Dmirty,看起来像是我的案例的答案。谢谢!

以上是关于AppEngine NDB:如何正确应用祖先?的主要内容,如果未能解决你的问题,请参考以下文章

App Engine 上 Cloud Datastore 的客户端库 - NDB 或 google-cloud-datastore

如何从同一应用项目中的 python2.7 微服务访问谷歌应用引擎 ndb 数据存储

在 NDB 中按父字段查询子表和排序结果

App Engine 中的 db.ReferenceProperty() 与 ndb.KeyProperty

从数据存储区查询大量 ndb 实体的最佳实践

60 年代的最后期限如何应用于 appengine .run 和 .fetch 检索?