如何使用高复制数据存储

2024-05-07

好的,我已经看过了video http://www.google.com/events/io/2011/sessions/more-9s-please-under-the-covers-of-the-high-replication-datastore.html并阅读 App Engine 文档中的文章(包括使用高复制数据存储 http://code.google.com/appengine/docs/python/datastore/hr/overview.html)。然而我仍然对它的实际用法感到完全困惑。我(从视频中)了解了这些好处,而且听起来很棒。但我缺少的是一些实际的例子。网络上有很多主/从示例,但很少说明(带有适当的文档)高复制数据存储。中使用的留言簿代码示例使用高复制数据存储 http://code.google.com/appengine/docs/python/datastore/hr/overview.html文章通过添加前面的留言簿代码示例所没有的新功能来说明祖先键(似乎您可以更改留言簿)。这只会增加混乱。

我经常使用Django 形式 http://code.google.com/appengine/articles/djangoforms.html在 GAE 上,我想知道是否有人可以帮助我将所有这些查询转换为高复制数据存储兼容查询(让我们暂时忘记讨论,并非所有查询都必须是高复制数据存储兼容查询并关注示例本身)。

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

So 本文中的查询 http://code.google.com/appengine/articles/djangoforms.html are:

本文中主要的重复查询是:

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

我们将其翻译为:

query = Item.all().order('name')  // datastore request

验证表单的过程如下:

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')

然而“留言簿”不存在在模型中 http://code.google.com/p/google-app-engine-samples/source/browse/trunk/guestbook_highrep/guestbook.py#34,那么如何使用 'db.Key.from_path' 以及为什么它会起作用?这是否会改变数据在数据存储中的存储方式,我在检索数据时需要考虑这一点(例如,它是否添加了我在使用 djangoforms 时应该从显示中排除的另一个字段)?

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


我不知道为什么你认为你需要改变你的查询。您链接到的文档明确指出:

后端发生了变化,但数据存储 API 根本没有变化。无论您使用哪个数据存储,您都将使用相同的编程接口。

该页面的要点只是说,如果您不使用实体组,查询可能会不同步。您的最终代码片段只是一个示例 - 字符串“Guestbook”正是祖先键。我不明白为什么你认为它需要存在于模型中。再次强调,这与非 HR 数据存储区没有变化 - 密钥始终是从路径构建的,路径可以包含任意字符串。您可能需要重新阅读有关的文档实体组和键 http://code.google.com/appengine/docs/python/datastore/entities.html#Entity_Groups_and_Ancestor_Paths.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用高复制数据存储 的相关文章

随机推荐

  • gem 如何提供 Cucumber 功能和步骤定义?

    我有两个 Rails 项目 A 和 B 其中包含以下宝石 project A gem green theme path gt dev themes green theme gem devel tasks path gt dev themes
  • MSIE 和 addEventListener Javascript 中出现问题?

    document getElementById container addEventListener copy beforecopy false 在Chrome Safari中 上面将在复制页面内容时运行 beforecopy 函数 MSI
  • C# Null 传播运算符/条件访问表达式和 if 块

    The 空传播运算符 条件访问表达式 https roslyn codeplex com discussions 540883进来c 6 0 questions tagged c 23 6 0看起来是一个非常方便的功能 但我很好奇它是否有助
  • 在 Ruby 中创建 Microsoft Word (.docx) 文档

    有没有一种简单的方法可以在 Ruby 应用程序中创建 Word 文档 docx 实际上 就我而言 它是一个由 Linux 服务器提供服务的 Rails 应用程序 类似的宝石Prawn http prawn majesticseacreatu
  • 读取Android文件系统中的所有文件

    我正在编写一个Android mediaPlayer应用程序 所以我想扫描整个手机上的所有文件 即sd卡和手机内存 我可以从 SD 卡读取数据 但不能读取它的根目录 也就是说 我可以从路径中读取 sdcard folder 它工作得很好 但
  • ASP.NET 5 OAuth 不记名令牌身份验证

    我正在尝试在 ASP NET 5 中实现 OAuth 不记名令牌身份验证 并且很难找到如何执行此操作的示例 因为 OWIN 内容在 ASP NET 5 中已发生变化 例如IApplicationBuilder UseOAuthAuthori
  • 在组织内部分发我的 python 模块

    我用 python 制作了一些模块 我想将它们分发到我的组织内 这些模块已经存储在BitBucket中 例如 有什么方法可以使用 pip install 来分发它们吗 正确的方法是什么 您可以从 GitHub 进行 pip 安装 并且应该能
  • 在Lua中获取前一天的日期

    谁能告诉我如何使用 Lua 获取 YYYY MM DD 格式的前一天日期 即 一个片段 它将返回运行当天的前一天的日期 Try print os date Y m d os time 24 60 60 严格来说 这只能保证在 POSIX 系
  • R 从 .CSV 创建 NetCDF

    我正在尝试从 csv 文件创建 NetCDF 我在这里和其他地方读过一些教程 但仍然有一些疑问 我有一个这样的表 lat long time rh temp 41 109 6 1 1 40 107 18 2 2 39 105 6 3 3 4
  • 相当于 DB2 的 LIMIT

    你好吗LIMIT在 iSeries 版 DB2 中 我有一个包含超过 50 000 条记录的表 我想返回 0 到 10 000 条记录 以及 10 000 到 20 000 条记录 我知道你用 SQL 写的LIMIT 0 10000在 0
  • 如何在动态创建的一组 editText 上设置 onFocusChangeListener()?

    我有这段代码 每次前一个 lineaLayout 的 edittext 失去焦点时 我都会膨胀一个包含 3 个 editText 的 LinearLayout 我只想在最近创建的 editTexts 上使用 onFocusChangeLis
  • java中如何查找两个时间戳的差异?

    我有一个ArrayList包括多个时间戳 目的是找到第一个和最后一个元素的差异ArrayList String a ArrayList get 0 String b ArrayList get ArrayList size 1 long d
  • 具有最小长度的 TypeScript 数组

    如何在 TypeScript 中创建只接受具有两个或更多元素的数组的类型 needsTwoOrMore onlyOne should have error needsTwoOrMore one two should be allowed n
  • 使用 IntelliJ 的 Cucumber 找不到步骤定义

    我遇到了以下问题 我在 IntelliJ 中有四个 Cucumber 功能文件 我通过 IntelliJ 插件添加了 Cucumber 支持 创建功能后 我按如下方式编辑了配置 以便可以执行功能文件 Glue should be the n
  • 如何将 tkinter 窗口放在其他窗口之上?

    我正在使用 Python 2Tkinter and PyObjC 然后我用py2app 该程序工作正常 但每当我打开该程序时 该窗口都会以隐藏状态开始 因此直到我单击扩展坞上的图标将其调出时 它才会出现 有什么方法可以控制这个 使窗口位于应
  • 相当于 Rcpp 中的 'which' 函数

    我是 C 和 Rcpp 的新手 假设我有一个向量 t1 lt c 1 2 NA NA 3 4 1 NA 5 我想获得 t1 的元素索引NA 我可以写 NumericVector retIdxNA NumericVector x Step 1
  • Redhat Vim 中的可视化块插入

    我的 ec2 服务器附带了 redhat vim ec2 user vim version VIM Vi IMproved 7 2 2008 Aug 9 compiled Jul 7 2012 08 03 48 Included patch
  • 在 Java 中加载和缓存图像的最佳方法是什么?

    我有超过一千个 16 x 16 像素图块图像的大量集合 我在 Java 中制作的游戏需要这些图像 在不耗尽 JVM 可用内存的情况下存储切片的最佳方法是什么 我认为生成 1000 BufferedImages 可能并不明智 保持图像准备就绪
  • 如何默认显示带有手动(键盘)输入的时间选择器对话框?

    时间选择器对话框默认显示循环计时以选择日期和时间 相反 它需要默认显示键盘输入来选择日期和时间 在以圆形样式显示时间选择器对话框时 它具有键盘图标 可将圆形样式更改为手动输入样式 Android Oreo 操作系统设备可使用此功能 如何在支
  • 如何使用高复制数据存储

    好的 我已经看过了video http www google com events io 2011 sessions more 9s please under the covers of the high replication datas