在 GAE 中实施独特的约束

2024-01-01

我正在尝试 Google App Engine Java,但是缺乏独特的约束使事情变得困难。 我已经通过这篇文章 https://stackoverflow.com/questions/2626978/unique-constraint-at-data-level-in-gae and 这个博客 http://squeeville.com/2009/01/30/add-a-unique-constraint-to-google-app-engine/提出了一种实现类似功能的方法。我的背景是 MySQL。迁移到没有唯一约束的数据存储让我感到紧张,因为我以前从来不用担心重复值,并且在插入新值之前检查每个值仍然有出错的空间。

“不,你仍然不能指定唯一的 在模式创建期间。”

-- 大卫·昂德希尔 https://stackoverflow.com/users/164602/david-underhill谈论 GAE 和唯一约束(发布链接 https://stackoverflow.com/questions/2626978/unique-constraint-at-data-level-in-gae/2627128#2627128)

你们用什么来实现类似于唯一键或主键的东西?

我听说有一个使用低级 api 创建的抽象数据存储层,它的工作方式类似于常规 RDB,但它不是免费的(但是我不记得该软件的名称)

我的问题的示意图

sNo = biggest serial_number in the db
sNo++
Insert new entry with sNo as serial_number value //checkpoint
User adds data pertaining to current serial_number 
Update entry with data where serial_number is sNo 

然而,在第 3 行(检查点),我觉得两个用户可能会添加相同的 sNo。这就是阻止我使用 appengine 的原因。


在谈论从传统 RDB 过渡到 App Engine 等类似 BigTable 的数据存储时,经常会出现这个问题和其他类似的问题。

讨论通常很有用why数据存储不支持唯一键,因为它告诉您在考虑数据存储方案时应该采取的心态。唯一约束不可用的原因是它极大地限制了可扩展性。正如您所说,强制执行约束意味着检查该属性的所有其他实体。无论您在代码中手动执行此操作还是数据存储在幕后自动执行此操作,它仍然需要发生,这意味着性能较低。可以进行一些优化,但仍然需要以某种方式进行。

你的问题的答案是,认真思考为什么你需要这种独特的约束。

其次,记住按键do存在于数据存储中,并且是强制执行简单唯一约束的好方法。

my_user = MyUser(key_name=users.get_current_user().email())
my_user.put()

这将保证不会MyUser将再次使用该电子邮件创建,并且您还可以快速检索MyUser与该电子邮件:

my_user = MyUser.get(users.get_current_user().email())

在 python 运行时你还可以这样做:

my_user = MyUser.get_or_create(key_name=users.get_current_user().email())

这将插入或检索具有该电子邮件的用户。

但任何比这更复杂的东西都无法扩展。因此,请认真考虑一下您是否需要该属性具有全局唯一性,或者是否有方法可以消除对该唯一约束的需要。很多时候,您会发现通过一些小的解决方法,您根本不需要该属性是唯一的。

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

在 GAE 中实施独特的约束 的相关文章

  • Spring、Hibernate 与 google 应用引擎

    项目名称 CarpoolDB 我已在另一个应用程序名称 Carpool 中添加了该项目的 jar 运行拼车应用程序时 我遇到以下异常 项目 拼车 在这里 我遇到异常 因为 carpoolService 在作为 Google Web应用程序
  • 如何让供应商与 Google App Engine 配合使用?

    我正在尝试引入 Go 供应商 将依赖项存储在名为的文件夹中 vendor 到现有的 App Engine 项目 我已将所有依赖项存储在供应商文件夹中 使用 Godep 作为助手 它看起来是正确的 但在本地运行应用程序时出现以下错误 go a
  • 即使未指定 @Load,Objectify 也会在 Ref 后面加载对象

    我有一个引用用户对象的帐户对象 Cache Entity public final class Account Id Long id Index private Ref
  • Bigtable数据库设计理论

    我非常精通关系数据库设计的理论和实践 我知道什么有效 什么无效 什么是高性能的 什么是可维护的 几乎 当您开始拥有真实数据时 总是有需要调整的地方 看来我找不到关于分布式可扩展数据库的大量知识 例如 Google 的 Bigtable 用于
  • 使用 Google App Engine 的 Mako 模板

    我想在 GAE 中使用 Mako 模板而不是 Django 模板 我找到了这个帖子http blog pansapiens com 2008 06 24 mako templates in google app engine seems t
  • Emacs:调试Python的方法

    我把这个贴在程序员 stackexchange com https softwareengineering stackexchange com questions 29844 emacs methods for debugging pyth
  • App Engine gzip 压缩

    我正在尝试对来自 GAE 服务器的响应进行 gzip 压缩 但在内容编码中收到空值 我有以下代码 connection HttpURLConnection url openConnection connection setRequestMe
  • Google App Engine 密钥中允许使用哪些字符?

    在测试我的 Google App Engine 应用程序时 我搜索包含应用程序引擎密钥的链接 例如 story ag5yZXBsaWUtdGVzdGluZ3IMCxIFU3RvcnkY w0M 这些键中允许使用哪些字符 我一直在使用正则表达
  • gwt 谷歌应用引擎 HTTP 错误 404

    我在 Eclipse 中使用 google 应用程序引擎创建了一个新的 gwt 项目 但是当我运行该项目时 在浏览器中我收到以下消息 HTTP 错误 404 访问 Test html 时出现问题 原因 NOT FOUND 由码头提供动力 现
  • GAE、JPA、XG 事务、实体组过多异常

    我知道 GAE 上的 XG 交易有 5 个实体组的限制 但我认为我在一项交易中仅使用 3 个组 商品 类别 商品类别 但仍然遇到此异常 引起原因 java lang IllegalArgumentException 在单个事务中对太多实体组
  • ndb.StructuredProperty 不调用 ndb.PolyModel 子类方法

    在将 ndb Polymodel 超类存储为 ndb StructuredProperty 时 我无法访问子类方法 相反 调用超类方法并引发 NotImplementedError 这是我想要完成的任务的删节版本 class Recipie
  • 如何将reportlab与Google应用程序引擎一起使用

    我无法在谷歌应用程序引擎下正确导入reportlab 根据以下guide http blog notdot net 2010 04 Generating PDFs on App Engine Python and introducing M
  • Cloud Functions for Firebase 中的套接字挂起错误

    我有一个由 Pub Sub 事件触发的云函数 它用请求 承诺 https github com request request promise从我用于数据的 API 发出多个 GET 请求 它在 Cloud Functions Emulat
  • Google App Engine 实例未启动

    我有一个 GAE 申请 通常 当我部署应用程序的某个版本时 几乎会自动为其创建一个实例 但有时 GAE 不会启动新实例 我可以等24小时 但什么也没发生 我必须多次部署相同的版本 直到最终 GAE 为其创建一个实例 坦率地说 这很烦人 这种
  • NoSuchMethodError:将 Firebase 与应用程序引擎应用程序集成时

    我试图将 firebase 实时数据库与谷歌应用程序引擎应用程序集成 我在调用时收到此错误 gt DatabaseReference ref FirebaseDatabase gt getInstance gt getReference t
  • Flex Nodejs 应用程序引擎上的数据存储停止工作 - 错误网关 502

    对我正在开发的应用程序进行一些更新后 我通过以下方式推送了该应用程序gcloud app deploy version dev一切似乎都进展顺利 但经过进一步检查 我的任何调用 获取或发布 使用 google cloud datastore
  • 使用 Python 和 Google App Engine 的 Cookie

    我正在 Google App Engine 上开发一个应用程序 但遇到了问题 我想向每个用户会话添加一个 cookie 以便我能够区分当前用户 我希望他们都是匿名的 因此我不需要登录 因此 我为 cookie 实现了以下代码 def cle
  • 使用 Intellij Idea 和 gradle 在应用程序引擎上调试 localhost

    我正在使用 IntelliJ 社区添加并使用 Gradle 构建应用程序引擎标准环境应用程序 在迁移到 IntelliJ 和端点框架之前 我使用的是 Android Studio 我无法调试我的本地主机 我添加了 jvmFlags 如下所述
  • Golang GAE - 小胡子结构中的 intID

    这是一个Example https www dropbox com sh ur2ws1jnik6euef PjVJSwDTUc Blog Golang zip该应用程序的 关键代码在 golang code handler handler
  • Tipfy:如何在模板中显示blob?

    鉴于在 gae 上使用tipfy http www tipfy org python 以下模型 greeting avatar db Blob avatar 显示 blob 此处为图像 的模板标签是什么 在这种情况下 斑点是一个图像 这很棒

随机推荐