【问题标题】:Google App Engine (Java): servlets, datastore, and multithreadingGoogle App Engine (Java):servlet、数据存储和多线程
【发布时间】:2012-09-30 16:25:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java google-app-engine servlets


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      您要查找的是交易 - 好像是App Engine Datastore supports them

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        • 2015-03-05
        • 2011-05-26
        • 2013-05-17
        • 1970-01-01
        相关资源
        最近更新 更多