问题标签 [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.
asp.net - 使用 EF6 从 IIS Web 请求读取/写入 SQLServer 时的并发控制
我正在编写一个托管在 IIS 上的 ASP.NET ApiController。在一个动作中,我需要调用一个名为 A 的 Web 服务,该服务由一家名为腾讯的公司提供。该服务要求我使用密钥进行身份验证。密钥是通过调用另一个Web界面生成的,来自腾讯的B,密钥有效期为3小时。服务 B 每天的通话次数有限制。因此,当我想使用 A 时,我无法调用 B。我只能调用 B 一次并将密钥存储在数据库中以备将来使用。
这意味着每次我想使用服务 A 时,我都需要检查数据库中密钥的验证,如果它已过期,则调用 B 并获取一个新的。
现在,当我需要通过调用 B 来更新我的密钥时,如果在返回新密钥之前,再次调用 ApiController 操作怎么办?新的请求也会发现数据库中的key已经失效,然后继续调用B,使得A新获取的key失效,导致A再次获取key,死循环。
我的问题是,你如何摆脱这种担忧?我该如何开始?来自 SQL、IIS 或 ASP.NET?
我正在使用 EF6 读取/写入数据库并使用 ASP.NET MVC 5。
谢谢你的帮助!
-- 补充 -- 我被建议使用 lock 关键字。但是,我想放心,知道锁将保护所有 IIS 请求中的数据库读/写部分。那么是否有任何关于 IIS 如何处理对同一个 ASP.NET 模块的多个请求并对其进行并发控制的文章?
mongodb - Mongo:仅当最后一个文档不同时才插入
在 MongoDB 中是否有任何并发友好的方式来执行此操作:
仅当按字段排序的最后一个文档对于另一个字段具有不同的值时,我才想插入文档。目标是拥有一个只存储转换而不是所有原始值的集合。
例子 :
这是一个集合(带有人性化的时间戳):
然后假设我收到一个新状态A
:
万一A
,没有status
过渡,所以我想更新集合并具有以下内容:
但是,如果我收到B
如下所示的新状态:
我想注册一个新的status
过渡,并在集合中保存一个新文档,因为B
它与status
最近更新的文档不同(具有timestamp === 3000
和status === "HEALTHY"
.
该集合将如下所示:
我能想到的就是制作一个findOne
来获取最近更新的文档,然后是一个update
或insert
取决于获取的文档和新接收到的对象之间的内存比较。但这不是并发友好的,因为另一个进程可能在我find
和我的insert/update
...之间插入了另一个文档。
是否有我不知道的模式或 mongo 功能可以使这成为可能?
sql - SQL 计数器增量并发问题 - 选择/更新问题
这更像是一个知识共享帖子。
最近在我的一个项目中,我遇到了一个很常见的问题,但在我遇到它之前从未真正考虑过它。有许多可用的解决方案,但不知何故我没有找到我正在寻找的那个,我将在这篇文章中分享。我相信你们中的许多人已经知道以下解决方案,但对于那些不知道的人来说,这绝对可以挽救生命。:-)
问题:
最近,我在做一个windows服务。该服务应该将一些记录插入到一个长期存在并被其他几个旧服务使用的表中。有一列(比如“ID”)包含一个整数值。为使 Integer 插入此表而编写的逻辑(可能是几年前)如下所述:
逻辑:
- 从表中读取一个值(比如表 1 – 名称/值对),
- 将其增加 1
- 更新值和
- 最后得到新值[/highlight]。
代码
使用的技术存在主要的并发问题。
- 多个线程读取相同的值
- 死锁问题
解决此类问题的最佳方法是什么 - 考虑到许多不同的应用程序/服务中都提到了这一点?
database - PostgreSQL 是否对只读事务进行了一些性能优化
根据参考文档,READ ONLY 事务标志除了允许 DEFERRABLE 事务之外还有用吗?
除非事务也是 SERIALIZABLE 和 READ ONLY,否则 DEFERRABLE 事务属性无效。当为事务选择所有这三个属性时,事务可能会在第一次获取其快照时阻塞,之后它能够在没有 SERIALIZABLE 事务的正常开销的情况下运行,并且没有任何有助于序列化或被序列化取消的风险失败。此模式非常适合长时间运行的报告或备份。
数据库引擎是否为只读事务运行其他优化?
mysql - 当多用户更新mysql中的同一条记录时,如何防止覆盖以前的数据?
用户 A 和用户 B 正在修改同一记录的同一列,当 A 完成时,该列的值发生变化。
如何防止 B 覆盖 A 输入的数据或仅显示一些提示?
我之前使用的方法是添加一个标记“更新计数(每次更新增加1)”的列。每次有人更新列之前,他/她都会得到标记,所以当他/她提交更新时,标记将与数据库进行比较,当不同时,有人更改了它。
还有其他想法吗?
ios - 从 NSConfinementConcurrencyType 切换到 NSPrivateQueueConcurrencyType 和 NSMainQueueConcurrencyType 是否有风险?
我有一些NSConfinementConcurrency
用于其 CoreData 的遗留代码,我将它们的使用切换到NSPrivateQueueConcurrencyType
or NSMainQueueConcurrencyType
。
是否有任何问题或风险从 切换NSConfinementConcurrencyType
到NSPrivateQueueConcurrencyType
并且NSMainQueueConcurrencyType
应该注意?
web - 如何处理 Web 应用逻辑和数据库并发?
假设我有一张名为items
. 我的 webapp 的用户可以删除items
表格的行,但我不想让表格为空。
所以目前我的应用程序中有这样的代码:
但我意识到这段代码容易受到并发问题的影响。例如,如果当前的大小items
为 2,并且有两个线程几乎同时执行此代码,则该表可能为空。
我认为这个问题对于编写 webapps 的人来说很常见。人们应该已经解决了。有哪些可用的解决方案?
c# - 如何防止 Web 应用程序中的竞争条件
我有一个 Web 应用程序,用户通过单击“加入”按钮进行注册。网站上可以有这么多用户,这就是为什么为了保持我的数据库查询速度快;我选择不在数据库中添加 foriegnkey 约束(虽然它是关系数据库)。
现在发生的情况是,当具有相同 userId 的用户在两个不同的浏览器中打开应用程序并同时点击“加入”按钮时;将同一用户的两行添加到数据库中,这是错误的。
我必须阻止这种情况的想法是:
- 在存储过程和 SQL 事务隔离级别为 SERIALIZABLE 的事务中执行检查/插入逻辑;但是使用这种方法,即使两个不同的用户同时点击“JOIN”按钮,表格也会被锁定。
- 在 c# 中使用 lock 关键字并从其中执行检查/插入逻辑,但我相信如果来自两个浏览器的同一个用户他们将获得自己的锁并且仍然能够在数据库中有两个条目。同样对于不同的用户,它可能会产生问题,因为其他人的代码将等待第一个释放资源。
- 使用 EntityFramework 开箱即用支持的乐观并发,但我不确定它是否能解决我的问题。
你能帮我解决这个问题吗?
node.js - 正确处理 ACID 事务和数据库并发的 NodeJS 框架
我是 NodeJS 世界的初学者,在 Java / Hibernate 中使用关系数据库已有数年。
我想将 Node 用于一个项目,并且花了一些时间研究处理适当的数据库事务/并发的框架/ORM,例如:
- 确保 ACID 事务块(操作集完全执行或根本不执行)
- 处理并发,即利用策略作为乐观/悲观锁定
我已经研究了一些有前途的 ORM,例如Sequelize和Waterline ,它们是最有前途的。
- Waterline 看起来不错,但缺少上述两个功能。
- Sequelize 看起来更加全面,具有适当的 ACID 事务处理。不支持锁定和并发。
我想向 NodeJS 专家询问具体的模式或策略,以及实现如何处理数据库级别的高并发负载、干净地重试失败的事务或确保 HA 系统中的数据完整性的任何模块。