【发布时间】:2012-02-15 15:37:10
【问题描述】:
最近我们的应用发生了一些数据结构变化,我们决定使用命名空间来分隔不同版本的数据,并使用 mapreduce 任务将旧实体转换为新格式。
现在这一切都很好,但我们不想总是隔离我们拥有的整个数据集。我们数据的最大部分以一种非常简单且不需要经常更改的方式存储。所以我们决定使用 per-kind 命名空间。
类似:
class Author(ndb.model.Model):
ns = '2'
class Book(ndb.model.Model):
ns = '1'
因此,当迁移到版本 2 时,我们不需要转换所有数据(并将所有“Book”种类复制到其他命名空间),只需转换“Author”种类的实体即可。然后,我们不再定义appengine_config.namespace_manager_default_namespace_for_request,而是只为查询添加“命名空间”关键字参数:
Author.query(namespace=Author.ns).get()
问题:如何使用这些不同的命名空间来存储(即put())不同的种类?比如:
# Not an API
Author().put(namespace=Author.ns)
当然,以上行不通。 (是的,我可以向数据存储区询问该命名空间中的可用密钥,然后使用该密钥来存储实例,但这是我想避免的额外 API 调用。)
【问题讨论】:
标签: google-app-engine google-cloud-datastore