如何使用高复制数据

2024-04-19 09:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我看过video并阅读了appengine文档中的文章(包括Using the High Replication Datastore)。然而,我对它的实际使用仍然感到困惑。我了解(从视频中)的好处,而且听起来很棒。但我缺少的是一些实际的例子。web上有大量的主/从示例,但很少(使用适当的文档)说明高复制数据存储。在Using the High Replication Datastore文章中使用的guestbook代码示例通过添加上一个上一个guestbook代码示例没有的新功能来说明祖先键(似乎您可以更改guestbook)。这只会增加混乱。在

我经常在GAE上使用djangoforms,我想知道是否有人可以帮助我将所有这些查询转换为与高复制数据存储兼容的查询(让我们暂时忘掉讨论,不是所有查询都必须是与高复制数据存储兼容的查询,而是关注示例本身)。在

更新:对于与高复制数据存储兼容的查询,我指的是始终返回最新数据而不是潜在陈旧数据的查询。在这里使用实体组似乎是一种方法,但是正如前面提到的,我没有很多实际的代码示例来说明如何做到这一点,所以这就是我要寻找的!

所以the queries in this article是:

本文中的主要循环查询是:

query = db.GqlQuery("SELECT * FROM Item ORDER BY name")

我们将翻译为:

^{pr2}$

验证表单的过程如下:

data = ItemForm(data=self.request.POST)
if data.is_valid():
    # Save the data, and redirect to the view page
    entity = data.save(commit=False)
    entity.added_by = users.get_current_user()
    entity.put()  // datastore request

从数据存储中获取用于填充表单的最新条目的过程如下:

id = int(self.request.get('id'))
item = Item.get(db.Key.from_path('Item', id))  // datastore request
data = ItemForm(data=self.request.POST, instance=item)

那么,要使所有这些数据存储请求与高复制数据存储兼容,我/我们需要做些什么呢?在

最后一件事我也不清楚。使用祖先键,这对数据存储中的模型有任何影响吗。例如,在留言簿代码示例中,他们使用:

def guestbook_key(guestbook_name=None):
  return db.Key.from_path('Guestbook', guestbook_name or 'default_guestbook')

但是'Guestbook'不存在in the model,所以您如何使用'db.Key.from_路径“在这个问题上,为什么这会起作用?这是否会改变数据存储在数据存储中的方式,我在检索数据时需要考虑这些因素(例如,它是否添加了另一个在使用djangforms时不显示的字段)?在

就像我之前说的,这让我很困惑,非常感谢你的帮助!在


Tags: the数据key代码nameselfid示例
2条回答

我不知道你为什么认为你需要改变你的查询。链接到的文档清楚地说明:

The back end changes, but the datastore API does not change at all. You'll use the same programming interfaces no matter which datastore you're using.

这个页面的重点只是说,如果不使用实体组,查询可能会不同步。最后的代码片段就是一个例子——字符串“Guestbook”就是一个祖先键。我不明白你为什么认为它需要存在于模型中。再一次,这一点与非HR数据存储区没有变化——一直以来,密钥都是从路径构建的,路径可以由任意字符串组成。您可能需要重新阅读entity groups and keys上的文档。在

使用HRD的变化不在于如何进行查询,而在于如何保证返回的数据。你举的例子:

query = db.GqlQuery("SELECT * FROM Item ORDER BY name")

也会在人力资源部工作。关键在于(基本上)这类查询(使用此语法或项目.全部()窗体)可以返回稍微过期的对象。这对留言簿来说可能没什么大不了的。在

请注意,如果直接通过键获取对象,则它永远不会过期。只有在查询时才能看到这个问题。您可以通过将所有需要保持一致的实体放在single entity group中来避免这个问题。请注意,这会限制向实体组写入的速率。在

在回答您的后续问题时,“留言簿”是实体的名称。在

相关问题 更多 >