数据库并发 - 处理不同步的对象

标签 database concurrency

我正在使用 DAL 服务从数据库中检索数据。

让我们观察最简单的情况,我从数据库中检索一个对象。

在检索到该对象后,我根据一些业务逻辑对其属性进行了一些更改, 而且我想更新持久数据库中的对象。

但是,其他一些客户端(甚至可能是我不知道的客户端)更改了数据库中下划线对象的状态,我在尝试更新时识别了这一点。

遇到这种情况我该怎么办?

我应该抛出异常吗?

我应该尝试只更新我更改的字段吗?

当我基于持久数据执行业务逻辑时,是否应该锁定该表以进行写入?

家伙

最佳答案

我认为你应该做什么取决于你想要达到的目标。 我认为您的主要选择:

  • 预先锁定 - 主要优点和缺点 - 在提交之前占用数据库,这要简单得多。

  • 不要预先锁定,合并以防其他人更新它 - 主要缺点 - 合并可能非常复杂

我会选择第一个,但我会尝试最小化锁定时间(即我会找出我想做的所有更改在锁定对象).

无论如何我不认为这是一个异常(exception)情况..所以我不会抛出异常。

关于数据库并发 - 处理不同步的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18757205/

相关文章:

database - 为什么数据库上有 "relations"而不是只使用 SQL 的连接?

database - 企业解决方案的架构

android - ListView 的多线程使错误的项目/根本没有项目出现

java - Java Servlet 中的 ExecutorService

java - 如果我自己不中断任何事情,我是否需要担心 InterruptedExceptions?

php - 如何将所有订单地点数据与 Magento 默认表一起保存在自定义表中?

c# - 如何从系统注册表中读取数据库连接字符串?

mysql - 我应该创建另一个表吗?

java - Util 创建一个在指定互斥体上同步的列表

Java - 并发修改异常