问题标签 [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.
php - 时间戳混淆:并发问题的解决方案
我目前正在开发一个网站,在进行数据库设计时,我对并发问题有些担心,我正在考虑使用时间戳来避免这种情况。
我对时间戳的理解是它是这样工作的:
- 有一个字段让我们说“DateModified”,其中每次更新该特定行的更新。
- 然后,只要有 1 个或多个用户访问该行,例如首先阅读,然后最终更新它。
- 在我对时间戳的理解中,我需要一个条件来首先读取我的代码中的“DateModified”。
readdatemodified = 从 ID = 的事务中选择 DateModified
datemodified = 从 ID = 的事务中选择 DateModified
IF datemodified == readdatemodified UPDATE Transaction where ID = ? ELSE 消息“有人更新了记录,请重试”。
IF:成功更新记录
ELSE:这里将通过访问数据库再次检索记录,以确保记录是更新的记录。
我在这里解决了并发问题,但我的新问题是我如何访问数据库。每次更新我都会多次访问数据库?
有没有办法可以使用时间戳最小化数据库访问?
postgresql - 如何在更新期间最小化数据库争用的可能性
我编写了一些 PostgreSQL 数据库客户端代码来更新中央数据库,其中包含来自多个客户端的 IP 地址和主机名表。有两张表:一张保存 IP 地址和主机名之间的映射,一张保存尚未解析为主机名的 IP 地址队列。
这是 IP 地址到主机名的映射表:
这是工作队列表:
数据库客户端每个都从单个工作队列表中拉取请求。每个请求都包含一个私有 IPv4 地址,为其请求主机名。
工作流程如下:每个客户端定期向中央数据库工作队列查询需要主机名的 IP 地址列表,对这些地址执行反向 DNS 查找,然后使用 ( IP 地址、主机名)对,一次一对。我希望通过尝试同时解析相同的 IP 地址来最大限度地减少多个客户端重复工作的可能性。
我将每批更新限制为 10 行或工作队列大小的 10%(以行为单位),以较大者为准。客户的时间有点独立。如何在更新过程中进一步减少 DNS 名称服务器和主机名表的争用?我的客户担心会有很多重复的工作。
这是对工作队列中项目计数的初始查询:
这是返回工作队列中项目子集的查询:
以下是使用新 IP 地址/主机名映射更新数据库的单个 INSERT 语句示例:
spring - CloudSQL 上的 GAE 悲观锁定
有没有人尝试在 GAE 上实现悲观锁定?在我的项目中,有些任务必须是相互排斥的。我已经通过使用:
哪个使用 SELECT FOR UPDATE 查询数据库,哪个运行良好……只要只有一个应用程序实例正在处理请求。如果有更多实例,我的请求将部分同时处理。
我已经通过在我的互斥方法中添加 10 秒的睡眠来对此进行测试。对于一个实例,在大约 60 秒内处理了 6 个请求,但对于 3 个实例,有时是 20 个,有时是 30 个,但从来没有 60 秒。
这是否意味着 CloudSQL 不会在 SQL 实例之间复制锁?有没有其他方法可以在表行上实现悲观锁定?
布雷马雷克
java - 在关系数据库中安全并发更新的好方法是什么?
我正在编写一个 Java 应用程序来更新关系数据库(目前是 H2)。我有一个执行以下操作的过程:
- 查询特定数据项的外部系统
- 通过检查导入日志表来检查这些项目是否已经导入到我们的系统中。如果不:
- 将新数据项导入到各种表中。
- 将新记录写入导入日志表。
这个过程可能在不同的线程中同时运行。我想避免两个线程可能都检查导入日志,在那里找不到任何东西,然后都尝试插入数据项的问题。
什么可能是一个好方法?我一直在考虑:
- 使用 SERIALIZABLE 事务隔离。
- 依靠导入日志中的唯一索引约束来出错并回滚其中一个事务。
- 将进程限制为 Java 应用程序中的单个线程。
出于各种原因,以上所有方法似乎都不是很吸引人——还有另一种可能效果更好的方法吗?
amazon-dynamodb - Amazon DynamoDB 条件写入和原子计数器
我目前正在处理的应用程序要求我在 20 到 30 分钟的时间内多次增加属于 DynamoDB 中某个项目的属性。我一直在做一些关于 DynamoDB条件写入和原子计数器的额外阅读
dynamo 中的原子计数器似乎是我需要的一个合乎逻辑的选择,但我确实担心数据的一致性,尤其是在像 dynamo 这样的分布式数据库中,以及我的数据的准确性问题。我预计 API 会在高峰时间受到重创,但我想避免与条件更新相关的性能问题。我想我想知道原子计数器在 DynamoDB 中的可靠性以及如何使用 dynamo 正确实现它们。也欢迎其他建议。
sql - Oracle 事务和读取一致性
考虑一下,我正在为所有在 12 点之前使用 sql*plus 与朋友注册的人提供彩票。没有用于存储时间戳的列,例如每行中的名称列表。一个人 m1 已经在 11:59 之前插入了他的票并提交了。
他在 11:59 开始更新他的(行)详细信息,将他的女仆添加到他的彩票列表中(只需提交)。另一个人 m2 运行 insert 语句在 11:59 开始他的第一次插入(只为他自己)(只需要提交)。它是一个有 2000 万行的巨大表。
现在12岁。将此视为已提交的读取隔离级别。
彩票批次开始,将注册用户移动到其他一些表。在那之后(很可能在下一纳秒),m1 和 m2 都提交。
我的选择语句是否会将 m1 与 m1 的女仆和 m2 添加到彩票中奖者列表中?
回答时考虑 scn(系统更改号)、幻像和不可重复读取。
mysql - MySQL中同时插入(innodb)
考虑我们t_log
在数据库中有一个表Test
。t_log 如下所示
假设F_action
字段只能取几个特定的值,如 1 和 2。对于F_action
=1 的记录,对应的F_trans_id
必须彼此不同。而对于F_action
=2 记录,对应F_trans_id
可以采用相同的值。
例如,表中如下所示的记录应该是有效的
但是,像以下这样的记录不应该是有效的
由于我们对 的唯一限制F_trans_id
取决于 的具体值F_action
,我们不能仅仅在 F_trans_id 和 F_action 上建立唯一索引。
为了保持一致性,将记录插入 t_log 被放入这样的事务中
但是在高并发环境下,可能有两个插入事务几乎同时到达,比如都进入了start_transaction(),假设两条记录都是(F_action=1, F_trans_id=222),在select和check的时候,都是找到的记录是有效的并插入它。然后t_log
会有无效的两条记录。
有什么好的方法可以防止这种无效记录吗?谢谢你。
sql - 如何使用多个任务将数据插入到多个关系表中
首先,我是编程新手。
我正在尝试制作一个使用许多任务的程序。这些任务会将数据插入到多个关系表中。(我正在使用 sql 服务器)
但是,我认为可能存在并发问题,例如,当一个任务在另一个关系表中将数据插入第一个表并使用最后插入的标识 id 时,同时另一个任务可以将数据插入第一个表并更改最后插入的身份 id,所以在这种情况下,随着最后插入的身份 id 更改,第一个任务将使用错误的(由第二个任务更改)最后插入的身份 id,我猜。
我想使用可序列化的锁来锁定整个事务,我想这会起作用,但这也会影响我猜的性能。
那么,在不影响性能的情况下我应该怎么做呢?
java - 调试并发环境中的数据库连接泄漏
我目前正在从事一个最初不是为高负载而构建的项目。
我的问题是,在压力测试(30 个用户)期间的某个时刻,应用程序似乎“卡住”了,当它发布时它会吐出很多异常。Unable to get managed connection for [MY_DS]
当我只运行一个用户时,它就像一个魅力,所以它与并发性有关。我还检查了一次运行结束时是否有任何未关闭的数据库连接并且没有,因此在正常使用时,没有连接泄漏。
我怀疑我的打开和关闭方法(因为它们是静态的)。以下是方法:
它是一个运行在由 SQL Server 2008 支持的 JBoss EAP 6.2.0 上的 EE 应用程序。
有人可以指出我正确的方向以找出可以找到解决方案的地方吗?
oracle - Oracle 数据库事务可以在这种情况下提供帮助吗?
我正在使用 Oracle 数据库(11g 第 2 版)。想象多个连接同时执行以下操作:
- 开始交易
- 检查唯一值表中是否存在特定值
- 如果该值不存在,则插入它
- 提交事务
在我看来,防止冲突的唯一方法是阻止连接执行上述 4 步序列,而任何其他连接当前正在执行 4 步序列。
事务可以在 Oracle 中实现这种广泛的锁定/阻塞吗?
提前感谢您对如何最好地处理这种情况的回答和建议。