gpt4 book ai didi

Java 与数据库存储对象的并发

转载 作者:行者123 更新时间:2023-11-30 02:46:04 25 4
gpt4 key购买 nike

这可能是一个主题的重复,但我在谷歌中找不到答案。 (可能用词错误)

我正在开发 Java REST API,并且我的数据库中存储了两个 java 对象。预约和可用性。要进行预约,我需要检查我的用户是否有空。

public void addAppointment(Date startDate, Date endDate, User user)
{
if(availabilityService.isAvailable(startDate, endDate, user)
dao.addAppointment(startDate, endDate, user);
}

如果我只有一个服务实例,则一切正常。但是,如果我有两个实例,并且它们在存储新约会之前同时检查我的方法怎么办?

如何管理数据库中存储的对象的并发性?

我不知道它是否会改变某些内容,但我计划使用 Google App Engine 或 AWS 来部署我的应用程序。

谢谢。

最佳答案

处理此问题的典型方法是对记录进行版本控制。一种称为乐观锁定的策略。当您阅读用户时,应该有该用户的版本。然后您可以进行所需的更改。当你去写它时,如果版本号不匹配,那么你就知道自从你阅读它以来,其他人已经更新了该记录。写入失败。您重新读取记录以获取更新,然后重试(如果新数据有意义)。

许多用于处理数据库的库都会内置此功能:

对于 AWS Dynamo 数据库:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html

如果您打算自带数据库,hibernate 是一个实现这种类型锁定的 java ORM: http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#entity-pojo-optlock

关于Java 与数据库存储对象的并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com