【发布时间】:2010-02-09 01:15:54
【问题描述】:
我阅读了应用引擎 wiki,如果写得太频繁,数据存储争用 1秒内超过5次。 wiki 介绍了使用“shard” 方法”作为解决方法。我可以知道我们是否使用 spring @transactional 在这一点上,这可以防止数据存储争用超时,因为 同时写入完成?
【问题讨论】:
标签: java spring google-app-engine google-cloud-datastore
我阅读了应用引擎 wiki,如果写得太频繁,数据存储争用 1秒内超过5次。 wiki 介绍了使用“shard” 方法”作为解决方法。我可以知道我们是否使用 spring @transactional 在这一点上,这可以防止数据存储争用超时,因为 同时写入完成?
【问题讨论】:
标签: java spring google-app-engine google-cloud-datastore
不,你不能那样做。无论您是否使用@transactional,它都不会解决问题——事实上您有一个对象需要继续写入。无论您使用什么方法,争用限制都将继续保持不变。
这个问题的答案实际上是决定你想要做什么,以及准确性对你来说有多重要。以一个简单的计数器为例,这是这个问题的一个常见例子。如果您认为准确性非常重要,那么您将必须有一个计数器列表,您可以按顺序或随机选择并写入。如果您在此列表中有 10 个计数器,那么这会为您提供每秒更多次的写入,甚至是事务性写入。不过,您需要编写代码来选择要写入的计数器。
另一方面,如果您不需要太高的精度,您可以尝试经常写入内存缓存。写入内存缓存或增加计数器时,写入争用限制要高得多。然后,您可以按设定的时间间隔写出并重置计数器。
【讨论】:
当我从事一个需要将大量单独记录存储到数据库的项目时,我发现系统无法处理所有并发事务。我改为在内存中构建对象,然后立即将其保存到数据库中。
【讨论】: