1

我正在使用谷歌应用引擎制作一个网站,但我对服务器端 servlet 以及它们如何与数据存储数据库交互有疑问。

基本上,它回到了传统的 read-modify-write 竞争条件;即我正在从数据存储中读取一个实体,可能会对其进行更新,然后如果有更新则写入更新。

基本上,我可以同步对数据存储的访问吗?我需要吗?据我了解,服务器可以根据需要生成尽可能多的 servlet 实例;我在“幕后”的东西中使用了静态方法,所以我确实认为我可以将静态方法与静态锁对象同步。

基本上,我不知道我需要/不需要采取哪些针对竞争条件/等的防御措施。如果某处有方便的指南,那就太好了,但我似乎找不到。

4

2 回答 2

1

在这里没有任何synchronized策略可以帮助您,因为 GAE 不仅可以(仅)生成许多 servlet 实例,还可以生成许多不同的 VM。为了解决有关防止数据存储一致性问题的基本问题,您必须在原子事务中访问您的数据。在这里检查:交易

于 2012-09-30T19:28:23.270 回答
1

我不知道 GAE 和他们的数据存储,但在标准 servlet 中,容器只创建每个 servlet 的一个实例并同时访问该 servlet。这对您的问题没有太大变化。

同步对数据存储的访问是一个坏主意。首先,这将很快成为一个瓶颈,因为只有一个客户端可以访问数据库,而其他所有客户端都必须等待。这是无法接受的。如果您的应用程序部署在多台服务器上,您的解决方案也会中断。synchronized块不聚集。

您正在寻找的是交易- 似乎App Engine Datastore 支持它们

于 2012-09-30T20:17:47.903 回答