当前位置: 首页 > 知识库问答 >
问题:

构建谷歌应用程序引擎以实现强大的一致性

慕容宇
2023-03-14

我想运行这个计划,以实现与我的GAE结构的高度一致性。目前,我有以下内容(我保证,这真的很简单):

您有一个类(类的意思是课堂不是编程“类”)模型和一个作业模型,还有一个用户模型。现在,一个类有一个名为MemberID的整数列表属性,它是一个用户ID的索引列表。类还具有赋值ID的字符串列表。

每当创建一个新的分配时,其相应的类实体也会更新,并将新的分配id添加到其列表中。

我想做的是为用户获取新的工作分配。我要做的是查询memberId=currentUserId的所有类。我得到的每个类都有一个作业ID列表。我使用这些ID按键获取各自的分配。使用这个数据模型几个月后,我才意识到我可能无法与它保持很强的一致性(对于类查询部分)。

如果用户A发布了一个分配(从而更新了ClassA),则在几分之一秒后签入新分配的用户B可能还没有看到对ClassA的更新更改(对吗?)。

这是不希望的。一种解决方案是用户祖先查询,但在我的情况下这是不可能的,实体组被限制为每秒写入1次,我不确定这是否足以满足我的情况。

所以我想,每当发布新作业时,我们都会这样做:

  • 获取相应的类实体

所以在整个过程中,我从来没有质疑过。所有的结果都应该是强烈一致的,对吧?这是一个好的解决方案吗?我是否使事情过于复杂?我的读/写成本是否因此飙升?你怎么看?

共有2个答案

许奇
2023-03-14

我认为使用祖先查询是一个更好的解决方案。

  • 将分配实体的祖先设置为分配分配分配给的类

这样,特定班级中的所有作业和学生都属于同一个实体组。因此,对于只需处理单个类的查询,可以保证强一致性。

注意:我假设不会有太多的人不会同时将作业发布到一个类中。(但是任意数量的人都可以将作业发布到不同的类中,因为他们属于不同的实体组)

刁璞
2023-03-14

查询不是强烈一致的。获取是强烈一致的。

我认为你做得对:

  1. 您的访问非常一致
  2. 您的读取将更便宜:一个get比返回一个实体的查询便宜一半
  3. 您的写入将更加昂贵:您还需要更新所有用户实体

因此,成本取决于您的使用模式:您有多少赋值读取与新赋值创建。

 类似资料:
  • 我是谷歌应用引擎的新手。要使用Java App Engine,Google提供了两个选项:创建一个Maven项目,或者由Eclipse Google插件支持的非Maven项目。根据文档,Eclipse版本更容易。那么我应该继续日食吗?但是我看到了很多关于maven的帖子。有人能评论一下使用Maven的利弊吗。 谢谢

  • 具体到基于Docker的部署,这两者之间有什么区别?由于Google App Engine Flexible现在也支持基于Dockerfile的部署,而且它也是完全管理的服务,所以它似乎比在Container Engine上配置Kubernetes部署更可取,不是吗? 有哪些用例更倾向于使用Google容器引擎而不是灵活的应用引擎?

  • 我一直在努力了解如何在谷歌云上设置以下架构: 谷歌应用引擎收到HTTP请求

  • 我正在app engine上构建一个web应用程序。在我的例子中,这是建立在django Nonl的基础上的,但关键是它使用的是谷歌的数据存储。 我喜欢这样一个事实,即我不需要处理复制、分片、备份等,但有一件事总是妨碍我,那就是最终的一致性,这似乎妨碍了实现一个通用的Web应用程序模式,我称之为“添加 假设我有一个项目管理应用程序。项目是它的中心模型。现在有一个网页页面,我可以在其中看到所有项目的

  • 是否有人有链接或可以提供Java谷歌应用程序引擎项目的代码,该项目只是与谷歌日历交互。假设从日历中获取活动。 Google Sample calendar-app engine-Sample在从HG检出后无法编译,我曾尝试搜索教程并创建自己的教程,只是运气好而已。 我已经设置了一个 API 访问项目来获取客户端机密.json。

  • 我想知道我是否需要Google java客户端库才能从GAE访问我的Google日历。默认情况下,它们是Google App Engine SDK的一部分吗? 此外,我找不到一个很好的示例或教程来展示如何从Google Cloud Platform应用程序创建、读取、更新和删除Google日历事件。 非常感谢,如果您可以提供相同的代码示例或链接到适当的工作教程。