Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 交易和实体组_Google App Engine_Go_Google Cloud Datastore - Fatal编程技术网

Google app engine 交易和实体组

Google app engine 交易和实体组,google-app-engine,go,google-cloud-datastore,Google App Engine,Go,Google Cloud Datastore,让我试着描述一下需求 我的产品有很多站点,每个站点都有很多仓库,每个仓库都有一个它负责的重要资源的计数 每当有人需要资源时,我都希望高效地选择一个(站点、仓库)来满足需求(基于一些启发式) 我想我需要在这样一个操作上进行交易(因为我不想让事情处于混乱状态) 我已经阅读了很多次文档,了解到实体组是执行事务的推荐方式 来自Google AppEngine Go文档: 实体的父级、父级的父级等递归地都是它的祖先;它的孩子,孩子的孩子,等等,都是它的后代。一个实体及其子实体被称为属于同一实体组 如果我使

让我试着描述一下需求

我的产品有很多站点,每个站点都有很多仓库,每个仓库都有一个它负责的重要资源的计数

每当有人需要资源时,我都希望高效地选择一个(站点、仓库)来满足需求(基于一些启发式)

我想我需要在这样一个操作上进行交易(因为我不想让事情处于混乱状态)

我已经阅读了很多次文档,了解到实体组是执行事务的推荐方式

来自Google AppEngine Go文档:

实体的父级、父级的父级等递归地都是它的祖先;它的孩子,孩子的孩子,等等,都是它的后代。一个实体及其子实体被称为属于同一实体组

如果我使每个仓库都有一个站点作为祖先,那么在同一站点(即实体组)下的仓库上操作时,我可以获得良好的控制

使所有现场及其仓库的操作安全的简单方法是什么

我想到的方法是:

  • 将所有站点置于虚拟父站点下,但这是否允许我以事务方式在W1(站点S1下的仓库)和W2(站点S2下的仓库)上操作?换句话说,W1和W2在一个实体组中是因为他们自己的祖先有相同的父代吗
  • 将所有仓库置于虚拟父级之下,并采取折衷方案,因为所有仓库都位于同一实体组中
是我还是实体组的含义根据文件稍微向上解释


PS:所需的此类安全操作的数量相对较低,因此我不太担心一个实体组下的写入吞吐量有限。

您的问题的答案是肯定的,如果实体具有相同的父级,则它们属于相同的组,即使该母公司是其中一个或两个实体的母公司:

以给定根实体作为祖先的每个实体都位于同一个目录中 实体组

发件人:


因此,实体组总是从根实体(没有父实体)开始,并包含其所有子实体?此外,您建议两种方法中的哪一种给出上述事实?是的,因此您必须小心不要在一个组中包含太多的实体,因为这样会造成性能限制。对于事务,您必须仔细检查您的用例。对数据存储的提交很少会失败,因此请查找存在实际损坏的用例(例如,将资金从一个帐户转移到另一个帐户)。您还可以使用任务API来处理某些请求,因为它使您能够控制重试。我无法帮助您选择解决方案,因为我不知道失败提交的预期负载和潜在损害。