问题标签 [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.
mysql - 锁定整个单个表,但仍允许访问 MySQL 上同一会话中的其他表
是否可以为会话锁定 MySQL 上的单个表,并且仍然能够在锁定该表的同一会话上读取和写入其他未锁定的表,而该表仍处于锁定状态?
optimistic-concurrency - 基于多版本时间戳的并发控制
在基于时间戳的并发控制中,如果某些带有 T_j 且 j > i 已经读过它的事务,为什么你必须拒绝在元素 x_k 上的事务 T_i 中写入。
如文件所述。
如果 T_j 根本不打算进行任何更新,为什么有必要对 T_i 的行为如此严格?
hibernate - 共享数据库中的并发控制
假设我有一个由多个应用程序共享的数据库。一个应用程序使用基于 ORM 的方法(比如休眠)进行持久性,另一个应用程序使用 sql 进行持久性。两者都对数据库进行写操作。
如果我们选择乐观锁定选项,我们如何确保并发控制?如果使用 SQL 插入数据,Hibernate 会自动同步持久化对象吗
mysql - 并发选择和删除
我有两笔交易。在创建后分配标签以发布的一种(事务 B)。另一个事务(事务 A)删除不再被任何帖子使用的标签。它是在删除后完成的。
交易A
交易 B
交易A
交易 B
我知道我可以在两个事务中使用 SELECT FOR UPDATE,但我不想锁定只分配标签的事务。我希望它们仅在有尝试删除标签的事务时才锁定。
php - 使用条件更新查询管理并发
我正在使用mysql,php。表 user_meetup id, user_id, meetup_id 具有唯一性 (user_id, meetup_id) 如果我的聚会受限于地点(10 个地点) 9 个用户已经标记了 rsvp 并且如果 2 个用户同时进行 RSVP(我只考虑了并发的情况)
现在他们两个都会到位,我的计数变成 11,我的解决方案是再添加一个表 user_meetup_count id、meetup_id、user_count(计数设置为 0 作为默认值,并且在创建聚会后立即创建记录)现在如果使用更新像 update user_meetup_count 这样的查询 set user_count = user_count + 1 where user_count < 10 如果我根据上面查询更新的行数写入 user_meetup 表,如果它返回 0 表示它已满,如果它返回 1 我得到了这个地方
如果 2 个用户同时尝试,这会起作用吗?我解决并发问题的方法对吗?有没有更好的办法 ?测试这种情况的工具是什么?
asp.net-mvc-4 - 实体框架自动增加非标识列/并发问题
我有两张桌子:
Campaigns.CampaignId 对于每个 CustomerId 都是唯一的;因此,它不能是一个身份。因此,从我的网络应用程序中,我需要在创建活动时自动增加活动 ID。过去,我必须在单个事务中获得锁才能获得下一个最高值并发出插入。我如何在 EF 中完成同样的事情而不必担心或有效地管理并发?
在 Campaign 控制器中,我有这个(UserContext 是一个静态助手类,用于检索用户的当前 CustomerId,db 是我的 DbContext):
但是,在高并发环境中,这不会有每个 CustomerId 重复值的风险吗?
编辑:
我忘了提到 guid 不是一种选择。Id 必须是整数。
编辑2:
我忘了提到还有一个用户表可以具有相同的 CustomerId。用户可以使用相同的 CustomerId 创建多个活动,这可能会导致并发问题。
sql-server - 如何仅启用已提交的读取快照
我想在 SQL Server 数据库中使用 READ COMMITTED SNAPSHOT,据我所知,它与 SNAPSHOT ISOLATION 不同。
我想启用 READ COMMITTED SNAPSHOT,因为我遇到了死锁问题。我正在使用 EF,我认为这将防止许多死锁。
阅读其他一些问题,我明白:
READ COMMITTED SNAPSHOT 意味着乐观读取和悲观写入,而 SNAPSHOT ISOLATION 意味着乐观读取和乐观写入
READ COMMITTED SNAPSHOT 适用于整个数据库,而 SNAPSHOT ISOLATION 是事务级别。
如果我只想启用 READ COMMITTED SNAPSHOT,下一句就足够了吗?ALTER DATABASE [DB] SET READ_COMMITTED_SNAPSHOT ON;
还是我也需要这句话?ALTER DATABASE [DB] 设置 ALLOW_SNAPSHOT_ISOLATION ON;
我问这个是因为我不完全确定 SQL Server 用于 READ COMMITTED SNAPSHOT 的机制是否会在没有最后一句话的情况下启用
谢谢
mysql - Mysql - 存储过程并发问题
我有一个存储过程,它从表 A 中选择值,然后用于从表 B 中选择。如果行数小于阈值,它会更新表 A 的值并重新选择表 B。
我关心的是当这个存储过程被同时命中并且行数> 3并且更新运行多次时。
那么首先,这会发生吗?如果是这样,由于存储过程中不允许锁定,我该如何防止这种情况发生?
感谢您提前提供信息!
python - 运行并发请求时获取“无效游标状态 (0)”(SQLAlchemy 和 wsgi/python)
我在 WSGI python web 应用程序中使用 SQLAlchemy 来查询数据库。如果我做两个并发请求,第二个请求总是抛出一个异常,SQL Server 声明
不幸的是,我似乎无法使用缓存来阻止对数据库的额外请求。有没有其他方法可以解决这个问题?理想情况下使用原生 python 库(即不依赖另一个 python 模块)?
我唯一能想到的是使用线程来锁定进行数据库查询的函数,但我担心这会减慢应用程序的速度。
还有什么可以做的吗?这是配置问题吗?
我在 Centos 5.9 服务器上使用 FreeTDS v0.91,连接到 MS SQL Server 2008。
webapp 基于粘贴。
sql-server - 了解事务隔离级别
我是这个话题的新手,我正在尝试验证我的理解。所以请考虑以下示例:-
Transaction 包含一个 select 和 update 语句,其中 update 语句取决于 select 语句返回的结果集。用户 A 和 B 并发执行事务,两个用户都选择了数据并即将执行更新。如果用户 A 先执行更新,用户 B 可能会出现 bug;因为它没有最新的结果集。这称为幻读案例。
对于可序列化的隔离级别:上述情况永远不会发生。事务是完全隔离的,不能同时工作。用户 B 的事务直到用户 A 完成其事务才能执行 select 语句。用户 B 将等待事务 A 完成。
对于可重复读隔离级别:事务 B 可以读取但不能对数据进行修改。这可能会导致幻读。
你能说这是否是正确的理解吗?