Spring CloudSQL上的GAE悲观锁定

Spring CloudSQL上的GAE悲观锁定,spring,google-app-engine,jakarta-ee,google-cloud-sql,database-concurrency,Spring,Google App Engine,Jakarta Ee,Google Cloud Sql,Database Concurrency,是否有人试图在GAE上实现悲观锁定?在我的项目中,有些任务必须是相互排斥的。我是通过以下方式做到这一点的: javax.persistence.EntityManager.find(entityClass, primaryKey, LockModeType.PESSIMISTIC_READ); 哪个使用SELECT查询数据库进行更新,哪个运行良好。。。只要只有一个应用程序实例正在处理请求。如果有更多实例,我的请求将部分并发处理 我已经通过在我的互斥方法中添加10秒的睡眠来测试了这一点。对于一个

是否有人试图在GAE上实现悲观锁定?在我的项目中,有些任务必须是相互排斥的。我是通过以下方式做到这一点的:

javax.persistence.EntityManager.find(entityClass, primaryKey, LockModeType.PESSIMISTIC_READ);
哪个使用SELECT查询数据库进行更新,哪个运行良好。。。只要只有一个应用程序实例正在处理请求。如果有更多实例,我的请求将部分并发处理

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

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


Marek

通过实例,您似乎指的是CloudSQL server实例,而不是AppEngine SQL客户端实例。CloudSQL是基于MySQL的,MySQL锁的作用域实际上仅限于一个服务器实例。复制复制SQL数据,但不复制会话或锁。因此,您的测量结果是有意义的


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

非常感谢您的快速回复。我认为现在我必须将我的实现改为更乐观,这在我的情况下稍微糟糕一些,但我可能别无选择:)