2010-02-09 24 views
2

我读过应用程序引擎维基,数据存储争用,如果太频繁在1秒内写入 超过5次。维基介绍使用“碎片” 办法”的解决方法。可能我知道,如果我们采用弹簧@Transactional 这一点,这样可以防止数据存储区争超时,因为在同时进行 写吧?写得太频繁,数据存储竞争超时

回答

1

不,你不能不管你是否使用@transactional,它都不会使问题消失 - 事实上你有一个对象需要你继续写下来。争用限制将继续保持你使用的任何方法。

这个问题的答案实际上是决定你想要做什么,以及准确性对你有多重要。以一个简单的计数器为例,这是这个问题的一个常见例子。如果你认为准确度很高重要的,那么你将不得不有一个顺序列表,你可以选择顺序或随机,并写入。如果你在这个列表中有十个计数器,那么这会给你每秒更多的写入次数,甚至是事务性写入次数。不过,您需要编写代码来选择要写入的计数器。

另一方面,如果您不需要太高的精度,您可以尝试经常写入memcache。写入内存缓存或增加计数器时,写入争用限制要高得多。然后,您可以按设定的时间间隔写出并重置计数器。

+0

这里有一篇关于如何实现它的详细文章:http://code.google.com/appengine/articles/sharding_counters.html – rochb 2010-02-13 13:28:01

+0

是的,我明白你的解释。但让我说'我不需要快速写'。将做@事务+顺序写入,通过缓慢地顺序写入'一次一个'来防止发生争用超时 – cometta 2010-02-19 08:30:16

+0

让我说我需要做6次写入数据库,我明白数据库可以做最多5次写入每秒。剩余的1(6-5)次在经过1秒后正确写入 – cometta 2010-02-19 12:50:05

1

当我在一个需要将大量单独记录存储到数据库的项目中时,我发现系统无法处理所有并发事务。我改为在内存中构建对象,然后将其保存到数据库中。