我已经使用祖先/实体组以及Google数据存储区每个实体组每秒写入1次的限制,了解了关于强一致性与最终一致性的许多知识。
但是,在测试中,我从未遇到异常Too much contention on these datastore entities. please try again.
,而是试图了解我是误解了这些概念还是错过了难题。
我正在创建这样的实体:
func usersKey(c appengine.Context) *datastore.Key {
return datastore.NewKey(c, "User", "default_users", 0, nil)
}
func (a *UserDS) UserCreateOrUpdate(c appengine.Context, user models.User) error {
key := datastore.NewKey(c, "User", user.UserId, 0, usersKey(c))
_, err := datastore.Put(c, key, &user)
return err
}
然后用阅读datastore.Get
。我知道自从按键进行查找以来,我不会遇到任何读取问题,但是如果我有大量的用户在创建和更新其信息,那么从理论上讲,我将不断达到每秒1个写入的最大值。
为了测试这一点,我尝试一次创建25个用户(使用上述方法,不进行批处理),但是我没有记录任何异常 ,这意味着我应该:Google App
Engine HRD-如果我超过1次写该怎么办每秒写入实体组的限制?
我想念什么?争用仅适用于查询吗?25的数量不够高吗?还是我完全错过了其他东西?
限制是针对每个实体组的,这意味着您可以创建任意数量的用户而不受限制(这是扩展的亮点),只要它们不共享同一祖先即可。
一旦开始使用用户密钥作为其他实体的祖先,事情就会发生变化,从而使它们成为同一组的一部分,从而限制了您每秒可以对其进行的更改数量。
顺便说一句,这是一个概括,很可能您每秒可以进行约5次更改,由于实体组的事务属性而存在此限制,因此存在某种类型的表,其中的更改必须按顺序执行,因此您有锁定,因此吞吐量有限。
但是,凭经验法则,您只能每秒执行1次操作,以迫使自己考虑如何在这种情况下工作。
如前所述,这仅在更新数据库,获取和查询应根据需要扩展时才有意义。
问题内容: 我想在单击按钮时从GUIinput获取数据,我编写此代码以获取数据,然后进入无限循环 问题答案: 我想单击按钮时从GUIinput获取数据 您正在上使用,这将阻止GUI响应事件,直到循环完成为止。 不要在EDT上使用Thread.sleep(…)! 有两种常见的解决方案: 使用Swing计时器每10秒安排一次事件。 使用单独的线程。然后,在此线程中,可以使用Thread.sleep()
我有一个函数,使API调用服务器和更新用户界面与新数据。我想使,使每30秒我使API调用不同的url每次?这些API调用应该是不间断的,只要应用程序正在运行。
我在努力打字 当我保存一个实体时,有时我的数据会更新,有时不会。完全相同的请求第一次不会起作用,但第二次会起作用。我使用保存()更新和插入。插入时一切都好。 以下是我的代码(使用NestJS键入表单): == == == == 当我在save()之后找到()时,我的用户地址不会更新,而我从Mongo收到了modifiedCount 1。如果我重复这个请求,这一次它是有效的。。。 有什么想法吗?
问题内容: 使用它可以在指定的时间启动功能: 但是,如果我想多次启动该功能怎么办?每次经过一个时间间隔,我都想执行该功能(假设每60秒执行一次)。 问题答案: 如果您不在乎内的代码是否可能花费比您的间隔更长的时间,请使用: 一遍又一遍地触发作为第一个参数传入的函数。 更好的方法是与函数一起使用: 这样可以保证在执行代码之前不会进行下一个调用。在本示例中,我将其用作函数参考。这是给函数命名并在其中调
我一直在android studio上开发一个Java应用程序,我想提取我存储在google数据存储中的几个实体。实体存储为列表 我只需要每个属性的“值”。 有没有办法将响应转换回带有json的数据存储实体? 编辑:我的代码片段
我是依赖注入的新手,最近不得不学习Spring和Guice。下面的问题可能很蹩脚。 Spring允许您创建带有@scope(“prototype”)注释的原型对象,这意味着每次都会返回一个新对象 例如在我的Spring容器中:- 并在@AutoWired的所有引用中注入一个新对象a。 但是,在guice注入器中,正在注入相同的实例。看起来guice只提供单例、请求或会话作用域https://git