问题标签 [database-concurrency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
641 浏览

sql - SQL 2005 sp_GetAppLock --- 何时调用 sp_ReleaseAppLock?

0 投票
2 回答
379 浏览

sql-server - 此 UPDATE 语句中是否存在可能的竞争条件?

我正在编写一个同步器软件,它将获取一个数据库中的所有更改并将它们同步到另一个数据库。为此,我在表中添加了T两列:

现在我可以轻松地选择自上次同步以来已更改的所有行:

但是,在执行同步后,我应该使两个字段相等。但是更新行也会更新时间戳,所以我必须这样做:

但我想知道 - 这会一直有效吗?如果我读取了 的值,@@DBTS然后另一个用户设法在我的行被提交之前在某处插入/更新行怎么办?这是有风险的代码吗?如果是的话 - 它怎么能变得更好?

0 投票
2 回答
159 浏览

c# - 需要死锁帮助

我有一个特殊的情况。我的表经常被我们代码的不同部分和数千个客户端访问,因此我们在对表进行简单更新和插入时使用了事务。问题是我们不断收到死锁错误。任何人都知道如何缓解这个问题?

0 投票
1 回答
121 浏览

linq-to-sql - Linq-to-Sql 读取-测试-写入作为一个操作

我有Tasks表:Id (PK), TaskName, Status
状态是以下之一:QueuedBusyComplete
我想使用多个线程来处理任务,为此我需要能够在一个操作中完成:

显然,如果操作不是原子的,我会遇到并发问题。使用 Linq-to-Sql 执行上述操作的预期方法是什么(如果存在)?

我知道我可以通过 1) storproc 或 2)db.ExecuteCommand("...")或 3) 处理冲突with try/catch来做到这一点 - 但我想确定没有更好的方法。

我知道这是一个非常基本的问题,但我无法找到明确的答案。

0 投票
2 回答
539 浏览

sql - 使用 SQL 数据库的高负载 Web 项目

我想问一个关于使用 SQL 数据库开发高负载 Web 应用程序的方法的问题。假设我们有一个简单的 CMS 系统,可以访问不同的文章。我们还想将文章访问量存储在数据库中。每次用户观看文章时,此访问计数器都会增加。

在SQL数据库方面,我们在“文章”表中有“访问”整数字段,每次用户访问文章时我们都需要增加该字段。如果文章有大量并发访问,需要正确修改当前数据库行的“visits”字段值。

我使用悲观锁定方法:“SELECT .. FOR UPDATE”。每次,当用户访问某篇文章时,我都会锁定“文章”表上的特定行并增加“访问次数”计数器。

这种方法正确吗?

我在我的项目中使用 MySQL 数据库。

0 投票
2 回答
13709 浏览

c# - 在数据库访问应用程序中管理并发的最佳方法是什么?

不久前,我编写了一个供多个用户使用的应用程序来处理交易创建。我已经有一段时间没有做开发了,我不记得我是如何管理用户之间的并发的。因此,我在设计方面寻求一些建议。

原始应用程序具有以下特点:

  • 每个用户一个重型客户端。
  • 单个数据库。
  • 为每个用户访问数据库以插入/更新/删除交易。
  • 应用程序中反映交易表的网格。每次有人更改交易时,该网格都会更新。
  • 我正在使用 WPF。

这就是我想知道的:

  1. 我认为我不应该关心每个应用程序与数据库的连接是否正确?考虑到每个都有一个单例,我希望每个客户端有一个连接,没有问题。

  2. 如何防止访问的并发性?我想我应该在修改数据时锁定,但不记得如何锁定。

  3. 如何将网格设置为在我的数据库更新时自动更新(例如,由另一个用户)?

预先感谢您的帮助!

0 投票
4 回答
368 浏览

java - 如何使用数据库作为通信媒介来实现分布式应用程序的最大并发性

我有一个类似于经典生产者消费者问题的应用程序。只是想检查所有可能的实现来实现它。问题是-

过程A:向数据库中的表中插入一行(生产者)

进程B:从表中读取M行,处理后删除读取的M行。

进程 B 中的任务: 1. 读取 M 行 2. 处理这些行 3. 删除这些行

进程 A 的 N1 个实例,进程 B 的 N2 个实例同时运行。

每个实例在不同的盒子上运行。

一些要求:如果进程 p1 正在读取 (0,M-1) 行。进程 p2 不应该等待 p1 直到它释放对这些行的锁定,而是应该读取 (M,2M-1) 行。

0 投票
1 回答
15526 浏览

hibernate - Hibernate (JPA):当多个对象被修改和提交时如何处理 StaleObjectStateException

考虑以下场景:一个 Db 事务涉及来自不同表的多行,并带有版本控制。

例如:一个shopLists和products。shopList 可能包含产品(其数量在 shoplist 中)并且产品具有其当前库存。

当我插入编辑 shopList 时,我希望更新 shopList 中这些产品的库存以保持库存一致。

为此,我打开一个事务,插入/更新 shopList,更新每个产品的库存(应用增量),然后提交事务。到现在也没什么大不了的。

然而,其他用户可能已经共同更新了一个或多个产品。甚至更新 shopList 本身。在这两种情况下,我都会在提交事务时收到 StaleObjectStateException。

问题是:有没有办法确定哪个表导致了 StaleObjectStateException?

如果产品导致异常,我可以从数据库中刷新所有涉及的产品,然后重新应用库存增量。这很好。如果 shopList 导致异常,最好将问题简单地报告给用户,以便他可以重新开始。

非常感谢您的帮助。

0 投票
1 回答
116 浏览

database - 数据库并发的工作机制

有人可以解释一下数据库并发是如何工作的吗?我正在使用 HSQLDB。

例如,如果有两个不同的用户从两个不同的入口点同时插入一条记录,那么数据库是如何处理的呢?这两个插入命令是一个一个执行的吗?或同时?

如果您知道,请随时提供任何其他信息。

非常感谢!

艾克

0 投票
2 回答
403 浏览

php - 死锁和超时会破坏 ACID 事务

我有像这样工作的事务应用程序:

然后在 increaseNumber() 里面我会有一个像这样的查询,这是唯一适用于这个表的函数:

一切都包含在事务中,但最近我一直在处理一些非常慢的查询,并且我的应用程序中有很多并发性,所以我无法确保查询是以特定顺序运行的。

死锁会导致 ACID 事务中断吗?我有一个添加某些内容的函数,然后是另一个删除它的函数,但是当我遇到死锁时,我发现数据完全不同步,就像忽略了事务一样。

这一定会发生还是有其他问题?

谢谢,多米尼克