问题标签 [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.
vb.net - TableAdapter 不更新 DataTable 中的内存值
我有一个带有设计器构建.Update()
命令的 TableAdapter。TableAdapter 还有一个命令,它将只更新其中一个记录中的一个字段。这个命令是.AddBankName
。
但是.AddBankName
似乎导致.Update()
引发并发冲突。.AddBankName
仅当实际更改数据库中的 BankName 字段时才会发生这种情况。
所以我认为正在发生的是AddBankName
TableAdapter 中的查询没有更新 TableAdapter 维护的数据库表的内存记录。
我怎样才能做出AddBankName
正确的更新。或者 - 我自己怎么做?
这是我的代码的摘录。UpdateDB
可以多次调用...
java - Apache Camel - 将消息路由到 JPA 端点 - 保留订单但根据类别标头拆分为池
我们有一个简单的项目,它从多个端点(代理)获取大量消息。这些代理都输出相同格式的消息(要放置在数据库中的实体对象)。所有代理都写入一个队列,我们使用这些并通过 JPA 将它们发送到数据库。
所以本质上,系统有一组生产者将消息写入一个队列。队列是单线程的,只接收消息并将它们转储到数据库中。
这里的问题是这种方法很慢。Camel 中是否有任何功能(例如重新排序),我们可以使用它们来根据它们的来源拆分这些消息。因此,虽然来自 Agent1 的消息需要按照它们创建的顺序进行持久化,但来自 Agent2 的消息是独立的,因此它们不应该按照 Agent1 的消息顺序等待。对于两个代理,这是一个简单的问题,因为我们只需创建两个队列,每个代理一个。我们有很多代理,所以我们需要一个可以扩展的解决方案。
是否有任何模式可以在骆驼中本地完成此任务?我们可以编写自己的保持队列,它与代理名称同步,并且只将一条消息放入多线程 JPA 写入队列,但这将是一种迂回的方式来做我们需要的事情设置从队列到 jpa 骆驼路由的回调,或者我们不会使用骆驼,而只是通过我们自己的管理器来完成(并不是说这会很复杂,但如果我们可以使用骆驼或其他东西来完成这一切,那就太好了并且不必重新发明轮子可以这么说)。
java - 防止重复插入而不使用 Oracle 中的唯一键
这是通过 Web 应用程序/Web 服务注册会员的用例。我们有一个复杂的算法来检查成员是否重复,方法是查看电话、地址等多个表格。该算法因会员所在国家/地区而异。所以这个限制不能使用主键/唯一键约束来实现。
所以我们在 Java 代码中进行了检查。但是,如果有 2 个重复的并发请求,则 2 个 Java 线程会看到该成员不存在,并且它们都插入了导致重复的记录。如何防止此类重复插入?
我可以通过使用行级锁或 Hibernate 的乐观并发来防止更新。我可以考虑使用表级锁来防止此类插入,但会限制应用程序性能,因为它也会阻止更新。我认为另一种选择是创建一个带有 id='memberInsert' 的记录的锁表,并通过 JDBC 强制所有插入以获取该记录的行级锁。
谢谢 Suneel
mysql - MySQL 和并发更新显示同时连接中的用户没有断开连接
我们有一个通过 phpmyadmin 管理的 MySQL 数据库。我的一位同事坚持认为,在所有同时连接都关闭之前,数据库不会解析对数据库的更新。我认为他是说如果我们有 20 个用户连接到同一个数据库并对其进行更新,那么所有 20 个用户都必须在更新完成之前断开连接。即,如果一个用户对表进行了更新,则其他用户在全部断开连接之前都无法看到它。是这样吗?
我环顾四周,找不到答案。据我所知, MySQL 参考手册并没有真正说明,虽然这里有一些类似的问题,但我没有找到答案。我的同事说这是几乎所有 DB 和 DBMS 都存在的限制。我不认为这是真的,但我更关心的是知道真相而不是正确,如果我发现这是真的,我会很高兴地改变我的立场。
我们运行的phpmyadmin版本是2.11.11.3,MySQL的版本是5.0.77。
sql - postgresql 可写公用表表达式并发
我刚刚了解了在 postgres-9.1 中使用可写公用表表达式,特别是从这个站点。http://vibhorkumar.wordpress.com/2011/10/26/upsertmerge-using-writable-cte-in-postgresql-9-1/
我向一些同事提到了这一点,并被问及 postgres 在执行此类操作时使用的并发模型/安全性。我的第一个想法是mytable
在语句的整个执行过程中被锁定,因此在所有情况下都应该是线程安全的。
这是一个正确的假设吗?我对 postgres 语句执行的内部并发模型知之甚少。但是,如果有人想深入了解他们想要的尽可能多的细节,那就太好了=]
hibernate - 在spring mvc(休眠)中处理并发
我很难相信我是唯一一个想知道实现这一点的正确方法的人,但不幸的是我的搜索没有返回任何好的解决方案。
基本上我们有使用 spring mvc 和 hibernate 实现的 web 应用程序。由于它是一个指向 jsp 页面的 MVC 模型,因此我们在完成请求后释放对象,然后在执行更新之前从 ID 重构。
考虑到并发性重新设计它的最佳方法是什么?(现在我们不考虑并发!!)是的,我们可以将版本保存为 JSP 中的隐藏字段并在发布请求中发送,但这似乎不是一个“优雅”的解决方案。有没有更好的办法?
c# - 实体框架和 DBContext 问题
我被警告不要在我的应用程序中使用多个实体框架的 DBEntityContext。原因是由于对数据库的并发访问而导致死锁的风险。
有人可以证实这一点吗?如果这是真的,那么为 DBContext 实现一个 Singleton 对象是个好主意吗?
欢迎任何关于这个问题的文章。
谢谢提前。
database - 为什么没有更广泛地使用基于时间戳的并发控制协议?
作为一个数据库理论概念,自从我第一次了解它们以来,我一直是基于时间戳的并发控制协议的忠实粉丝。我注意到它们似乎没有被太多使用。这是为什么?还是我错了?
编辑:我的意思是带有读写时间戳的时间戳数据项和具有固定时间戳顺序的时间戳事务,类似于此处描述的内容:http ://en.wikipedia.org/wiki/Timestamp-based_concurrency_control
azure - Azure 数据库并发使用问题
只是想由大家运行一下,看看是否有任何好的想法,因为经过一整天、一夜和一早的搜索,我已经用尽了所有的想法。在并发使用(selenium 测试)时,我们遇到的问题总是围绕数据库连接,例如超时、断开/关闭的连接、无法访问数据库服务器。
这个问题似乎仅限于 Azure,因为即使在指向同一个数据库(SQL Azure)的相同代码上运行相同的硒测试时,我们还没有在本地遇到这个问题,所以它会指出它是出站的一些问题SQL Azure 中的数据库连接。到目前为止,我们已经尝试了以下方法:
- Azure 瞬态故障处理——当 SQL Azure 服务本身出现临时问题时,我们有重试逻辑。
- 更改通信协议——我们已经尝试过 TCP 和命名管道,但我们都遇到了同样的问题。
- 调整数据库连接超时间隔——我们尝试增加此时间无济于事。
- 添加多个活动结果集 – 我们已将其添加到连接字符串中,但无济于事。
- 检查每个查询的连接状态——当我们返回 DataContext 时,我们检查它的连接并在必要时重新打开。
- 关闭连接池 - 我们也尝试过,但没有成功。
改变了设计模式——我们甚至不遗余力地实现了工作单元设计模式,在每个工作单元之后都会启动和处理数据库连接,但这会在其他地方引起延迟加载、将对象传递给方法等问题在这一点上,这将是一个太大的返工。
更改角色大小——我想尝试的最后一件事是在 Windows Azure 中存在任何隐式连接限制的情况下增加角色大小——目前正在部署,所以它仍有一半可能起作用!
网站基础设施如下:
- DataContext 类(扩展 DbContext),它是 Code First EF 上下文。
- BusinessLayer 类包含一个私有的、非静态的 DataContext。DataContext 是注入每个 Manager/Helper 类的构造函数。
- BusinessLayerService 类包含一个公共的、线程静态的 BusinessLayer 实例。
- MVC 站点使用 BusinessLayerService.Instance 访问管理器类,这些管理器类查询和更新它们已传递的 DataContext。
任何帮助将不胜感激。
更新:我们将 VM 大小提高到中,它所做的只是意味着同样的问题需要更长的时间才能发生。
当问题开始发生时,一名团队成员注意到发生了以下异常:
InvalidOperationException:执行命令需要打开且可用的连接。连接的当前状态已断开。
每当数据库被击中时,这种情况就开始发生(不是特定于某个代码区域)。
java - 用于 REST 服务的单个 MySql 数据库连接
我正在开发通过 REST 服务获取和发布数据到数据库的 Android 应用程序。我已经用 Java 中的 Jersey 和 Tomcat 配置了 REST 服务。
我在 REST 服务启动时创建了单个数据库连接。现在所有的 android 客户端都使用单个数据库连接。现在我只想知道在我的场景中使用单个数据库连接是一种好习惯..单个数据库连接可以容纳多个并发请求??
请建议....
更新
当我测试以下场景时,它给出了不同的结果..我刚刚使用带有 Get 注释的 Jersey 配置了简单的 REST 服务器,在这个注释中我编写了代码来使用数据库连接获取 id 为 300 的员工的姓名在 REST 启动时建立..所以当我 http://192.168.15.9:8080/Rest/rest/person/sample
在我的网络浏览器上写字时,我得到了员工姓名......然后我创建了批处理文件以在 100 个选项卡中打开 url,我执行了批处理文件。同时,我从我的虚拟机打开 url 并立即获得员工姓名。员工姓名也在 20 秒后显示在 100 个选项卡中。如果单个数据库连接不能用于并发用户,那么为什么我会给出响应迅速??谁能解释一下??