Google app engine GAE数据存储争用避免?

Google app engine GAE数据存储争用避免?,google-app-engine,query-optimization,Google App Engine,Query Optimization,通过GAE文件找到我的路 我有个问题找不到明确的答案。如果一个实体组的事务限制为1/秒,那么如果10000个用户都希望同时访问某个特定用户的页面,您如何扩展请求 这难道不会在1/s内对特定用户的实体组进行10000次读取,从而导致灾难性的系统故障和用户不满意吗 或者我很困惑,只有写作才会引起争议。对。我没在想。答案是memcache。至少部分。这是一个高效的数据模型/模式。对。我没在想。答案是memcache。至少部分。这是一个高效的数据模型/模式。AppEngine用于事务a,这意味着它们不会

通过GAE文件找到我的路

我有个问题找不到明确的答案。如果一个实体组的事务限制为1/秒,那么如果10000个用户都希望同时访问某个特定用户的页面,您如何扩展请求

这难道不会在1/s内对特定用户的实体组进行10000次读取,从而导致灾难性的系统故障和用户不满意吗


或者我很困惑,只有写作才会引起争议。

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

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

AppEngine用于事务a,这意味着它们不会锁定数据,而是在检测到数据“脏”时抛出异常。因此,更改数据的第一个事务是正常的,第二个事务得到异常,必须重试

考虑到这一点,我假设如果读取不是事务的一部分,即使其他事务正在进行,读取也不会阻塞

此外,为了减少事务的瓶颈,应该仔细组织实体组,使其尽可能小,并以尽可能少的争用(并行请求)的方式组织它们。意思是:

  • 拥有小型实体图-不要将大量实体放在公共父项下
  • 尝试将用户实体作为根父级。用户通常不会创建并行交易(例如,同时进行多笔转账等)

  • AppEngine用于事务a,这意味着它们不会锁定数据,而是在检测到数据“脏”时引发异常。因此,更改数据的第一个事务是正常的,第二个事务得到异常,必须重试

    考虑到这一点,我假设如果读取不是事务的一部分,即使其他事务正在进行,读取也不会阻塞

    此外,为了减少事务的瓶颈,应该仔细组织实体组,使其尽可能小,并以尽可能少的争用(并行请求)的方式组织它们。意思是:

  • 拥有小型实体图-不要将大量实体放在公共父项下
  • 尝试将用户实体作为根父级。用户通常不会创建并行交易(例如,同时进行多笔转账等)

  • 您的假设是正确的-更新速率限制只适用于更新,而不适用于读取。感谢Peter的全面建议您的假设是正确的-更新速率限制只适用于更新,而不适用于读取。感谢Peter的全面建议不,解决方案是没有问题-速率限制只适用于写入,而不适用于读取。不过,使用memcache仍然是一个很好的主意。不,解决方案是没有问题——速率限制只适用于写入,而不适用于读取。不过,使用memcache仍然是一个非常好的主意。