2012-01-05 103 views
0

让我通过GAE文档。GAE数据存储争用避免?

我有一个问题,我找不到明显的答案。假设实体组的交易限制为1 /秒,那么在10,000个用户都希望同时访问特定用户的页面的情况下,如何扩展请求呢?

这不会给你10000个读取特定用户的实体组,每秒钟1次,从而导致灾难性的系统故障和不满意的用户?

还是我困惑,只写写争议。

回答

5

AppEngine使用事务optimistic concurrency control,这意味着它们不会锁定数据,但会在检测到数据“脏”时抛出异常。因此,第一次更改数据的事务没问题,第二次获取异常并且必须重试。

鉴于此,我假设读取不会阻止,如果它们不是事务的一部分,即使其他事务正在进行。另外,为了减少事务的瓶颈,我们应该仔细组织实体组并尽可能小,并且让它们的组织方式尽量少争用(并行请求)。含义:

  1. 有小实体图 - 不要在共同父项下放置很多实体。
  2. 尝试将用户实体作为根父级。用户通常不会创建并行交易(例如同时进行多次汇款等)。
+1

您的假设是正确的 - 更新速率限制仅适用于更新,而不适用于读取。 – 2012-01-05 22:48:47

+0

感谢彼得彻底的建议 – 2012-01-06 11:50:57

0

没错。我没在想。答案是memcache。至少部分。这是一个高效的数据模型/模式。

+0

不,解决方案是没有问题 - 速率限制仅适用于写入,而不适用于读取。不过,使用memcache仍然是个好主意。 – 2012-01-05 22:49:08

+0

太好了。谢谢@Google – 2012-01-06 11:49:49