根实体中的 GAE 事务

2024-03-26

我是 GAE 新手,对数据存储事务有一些疑问。

例如,我有一个用户实体,当用户在 Facebook 上添加我的应用程序时创建该实体。我通过 Facebook API 获得了一些属性,但我想为用户添加用户名,并且该用户名必须是唯一的。所以在事务范围内我调用这个方法:

def ExistsUsernameToDiferentUser(self, user, username):
    query = User.all()
    query.filter("username", username)
    query.filter("idFacebook != ", user.idFacebook)
    userReturned = query.get()
    return True if userReturned else False

但 GAE 给了我这个错误:

BadRequestError:事务内的查询必须有祖先

好的,我明白,但是用户没有任何祖先,它是根实体。我需要做什么?


我明白你现在想做什么。

通过强制使用祖先,数据存储会强制您锁定数据存储的一部分(给定祖先下的所有内容),以便您可以保证该部分的一致性。然而,要做你想做的事,你本质上需要锁定所有 User 实体来查询某个 User 实体是否存在,然后创建一个新的 User 实体,然后解锁它们。

您可以这样做,只需创建一个实体,它可以是一个空实体,但确保它有一个唯一的键(如“用户祖先”),保存它,并使其成为每个用户实体的祖先。 这可能是一个坏主意,因为这会限制您在用户实体上的性能,特别是在写入方面。每次创建新用户时,都会阻止更新所有用户实体。

我试图说明在人力资源开发领域中您需要如何以不同的方式思考交易。您可以自行构建数据(使用祖先),以便为您的特定应用程序获得良好的性能特征。事实上,您可能不同意我的观点,并说用户实体的更新频率非常低,因此可以将它们全部锁定。

出于说明目的,另一种短视的可能性是根据用户名创建多个祖先。即,字母表中的每个字母对应一个。然后当你需要创建一个新的User时,你可以根据相应的祖先进行搜索。虽然这比拥有单一祖先有所改进(好 26 倍),但它仍然会预先限制您未来的表现。如果您现在知道最终将拥有的用户总数,这可能没问题,但我怀疑您需要数亿用户。

最好的方法是返回其他建议并将用户名作为密钥。这为您提供了最佳的可扩展性,因为通过密钥获取/设置用户实体可以是事务性的,并且不会锁定其他实体,从而限制您的可扩展性。

您需要找到一种方法来解决这个问题。例如,您在用户名之前获得的任何信息都可以存储在另一个实体中,该实体具有与稍后创建的用户相关的字段。或者,您可以在通过密钥创建用户实体后将该数据复制到用户实体中,然后删除原始实体。

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

根实体中的 GAE 事务 的相关文章

随机推荐

  • boost::hash_combine 与简单异或运算

    使用boost库时 函数boost hash combine工作原理如下 seed hash value v 0x9e3779b9 seed lt lt 6 seed gt gt 2 http www boost org doc libs
  • 通过 css 的 Vaadin Flow/10/11 样式组件

    我的问题很基本 如何将 css 文件中的样式添加到基本 vaadin 组件中 我做什么NOT想要使用 聚合物模板 getStyle set 我是否必须 ImportHtml 其中包含 css 代码 还是必须 StyleSheet 与 css
  • System.Net.Mail 和 =?utf-8?B?XXXXX.... 标头

    我正在尝试使用下面的代码通过以下方式发送消息System Net Mail and am 有时获得像这样的主题 utf 8 B W3AxM25dIEZpbGV 修剪 这就是所谓的代码 MailMessage message new Mail
  • 使用 Fluentvalidation 显示带有 NotEmpty 的星号

    我想在 Asp Net MVC 4 网页上显示label当属性有时带有星号NotEmpty rule 只需将此函数添加到您的常用脚本函数中并在加载时运行 document ready function setRequired functio
  • 从Android模拟器读取C盘文件

    我正在 Android 模拟器上尝试测试应用程序 我希望该应用程序将数据写入存储在我的 C 驱动器上的文件 我已经从 Samba 驱动器和 Web 服务读取和写入数据 但读取和写入本地硬盘似乎是一个难题 我试过filePath file C
  • 如何在隐藏的默认浏览器中打开网页?德尔福

    我一直试图从 delphi 打开隐藏的默认浏览器 但无法打开 I tried ShellExecute self WindowHandle open www google com nil nil SW HIDE 我打开了 chrome 浏览
  • android 6.0.1 (Galaxy Note 5) 通过 FCM 推送通知,优先级高,不从瞌睡模式中唤醒

    经过几周的寻找答案后 遇到了无数的剖析 没有人提供解决方案 甚至没有人找出问题 或改变 https github com firebase quickstart android issues 89 https github com fire
  • 覆盖标记点击操作

    我想在用户单击编辑器左侧垂直标尺上的标记时添加自定义操作 我设法通过添加来运行自定义操作plugin xml下面的代码
  • json_encode PHP 数组为 JSON 数组而不是 JSON 对象

    我在 PHP 中有以下数组 Array 0 gt Array id gt 0 name gt name1 short name gt n1 2 gt Array id gt 2 name gt name2 short name gt n2
  • 如何在给定宽度和高度的情况下调整对象的 2D 向量的大小?

    我的课 GameBoard 有一个成员变量 它是该类对象的二维向量Tile The GameBoard构造函数将宽度和高度作为参数 我怎样才能得到二维向量Tile根据传递给构造函数的宽度和高度调整对象大小 我怎样才能填充它Tile对象以便我
  • CSV 字符串到数据表

    我有以下字符串 我想将其转换为数据表 Id Name Dept r n1 Mike IT r n2 Joe HR r n3 Peter IT r n 我可以使用 String Split 并迭代集合来创建它 但我需要有效的方法 使用 C 4
  • 带有嵌入式哈希表的 Powershell ConvertTo-json

    我在 ConvertTo Json 方面遇到问题 并试图理解其行为和 或我做错了什么 考虑以下命令序列 val ID 10 Config ID 11 Config ID 12 Config end ConvertTo json val Co
  • dask 数据帧 head() 返回空 df

    我有一个 dask 数据框 其中一列上有索引 问题是如果我执行 df head 它总是返回一个空的 df 而 df tail 总是返回正确的 df 我检查过 df head 总是检查第一个分区中的前 n 个条目 因此 如果我执行 df re
  • 在 AppDomain 之间共享数据

    我有一个可以有多个应用程序域的进程 每个AppDomain 都会收集一些统计数据 在指定的时间之后 我想累积这些统计数据并将它们保存到文件中 实现此目的的一种方法是远程处理 我想避免这种情况 我想到的唯一其他技术是将每个应用程序域的数据保存
  • MVC contrib 寻呼机

    我这样使用它 有没有简单的方法来更改呈现的网址 我查找了更多文档 但找不到太多 你到底想改变什么 这是我更改 URL 的方法 Html Pager Model AssetsPagedList First First Last Last Ne
  • 如何在 Spark Dataframe 中按组/分区重命名列?

    我有一些传感器数据按通道名称而不是传感器名称存储在表中 这是为了避免表太宽 因为许多传感器仅在少数设备上使用 这是稀疏列的工作 我知道 但我只是数据的用户 像这样的事情 from functools import reduce import
  • 内存映射显示的 RAM 多于物理可用内存

    我正在开发一个小型 x86 内核 我正在访问并尝试读取 GRUB 在多重引导标头中提供的内存映射 我有一个 Intel i3 cpu 和 4 GiB RAM 在这台机器上运行时 我正在读取以下内存映射 Base Address Length
  • phpmyadmin的PHP不执行但其他php脚本可以运行

    调用 phpmyadmin 网站时 会出现 保存文件 对话框application x httpd php 所以我的服务器不执行 phpmyadmin php 脚本 而是将代码传输到我的浏览器 其他 php 如 roundcube 或 is
  • Gradle:下载包含的 aar-library 的依赖项

    我写了一个图书馆项目cameraBarcodeScanner它内置于 aar 文件中 该库在其 build gradle 中定义了以下依赖项 dependencies compile fileTree dir libs include ja
  • 根实体中的 GAE 事务

    我是 GAE 新手 对数据存储事务有一些疑问 例如 我有一个用户实体 当用户在 Facebook 上添加我的应用程序时创建该实体 我通过 Facebook API 获得了一些属性 但我想为用户添加用户名 并且该用户名必须是唯一的 所以在事务