【问题标题】:GAE pessimistic locking on CloudSQLCloudSQL 上的 GAE 悲观锁定
【发布时间】:2014-01-24 13:21:37
【问题描述】:

有没有人尝试在 GAE 上实现悲观锁定?在我的项目中,有些任务必须是相互排斥的。我已经通过使用:

javax.persistence.EntityManager.find(entityClass, primaryKey, LockModeType.PESSIMISTIC_READ);

哪个使用 SELECT FOR UPDATE 查询数据库,哪个运行良好……只要只有一个应用程序实例正在处理请求。如果有更多实例,我的请求将部分并发处理。

我通过在我的互斥方法中添加 10 秒的睡眠对此进行了测试。一个实例在大约 60 秒内处理了 6 个请求,但对于 3 个实例,有时是 20 个,有时是 30 个,但从来没有 60 秒。

这是否意味着 CloudSQL 不会在 SQL 实例之间复制锁?有没有其他方法可以在表行上实现悲观锁定?

溴 马立克

【问题讨论】:

    标签: spring google-app-engine jakarta-ee google-cloud-sql database-concurrency


    【解决方案1】:

    您的实例似乎是指 CloudSQL 服务器实例,而不是 AppEngine SQL 客户端实例。 CloudSQL 是基于 MySQL 的,MySQL 锁的范围确实仅限于单个服务器实例。复制复制 SQL 数据,但不复制会话或锁。因此,您的测量结果是有意义的。

    它可能不适合您,但您可以将 CloudSQL 实例的数量保持在 1,但增加 AppEngine 服务器实例的数量,这将是 CloudSQL 客户端。希望在不牺牲一致性(悲观锁定)的情况下提供一些可伸缩性。你的困境是CAP定理的必然体现。

    【讨论】:

    • 非常感谢您的快速回复。我想现在我必须将我的实现更改为更乐观,这在我的情况下稍微差一些,但可能我别无选择:)
    猜你喜欢
    • 2010-09-12
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    相关资源
    最近更新 更多