问题标签 [distributed-transactions]
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.
c# - 使用 transactionscope 时停止事务升级到分布式的推荐做法
使用 TransactionScope 对象设置不需要跨函数调用传递的隐式事务非常棒!但是,如果一个连接打开而另一个连接已经打开,事务协调器会默默地升级要分发的事务(需要运行 MSDTC 服务并占用更多资源和时间)。
所以,这很好:
但这会升级交易:
是否有推荐的做法来避免以这种方式升级事务,同时仍然使用嵌套连接?
目前我能想到的最好的方法是拥有一个 ThreadStatic 连接并在设置 Transaction.Current 时重用它,如下所示:
编辑:所以,如果答案是当它嵌套在事务范围内时重用相同的连接,就像上面的代码一样,我想知道在事务中处理这个连接的含义。
据我所知(使用反射器检查代码),连接的设置(连接字符串等)被重置并且连接被关闭。因此(理论上),重新设置连接字符串并在后续调用中打开连接应该“重用”连接并防止升级(我的初始测试同意这一点)。
不过,它看起来确实有点老套……而且我敢肯定,在某处必须有一个最佳实践,即在对象被处理后不应继续使用它!
但是,由于我无法继承密封的 SqlConnection,并且想要维护与事务无关的连接池友好方法,因此我很难(但会很高兴)看到更好的方法。
另外,意识到如果应用程序代码尝试打开嵌套连接(在我们的代码库中大多数情况下是不必要的),我可以通过抛出异常来强制非嵌套连接
仍然会重视一个不那么老套的解决方案:)
database - 什么是“分布式交易”?
分布式事务的维基百科文章不是很有帮助。
您能否给出有关分布式事务是什么的更多详细信息的高级描述?
另外,您能否举例说明为什么应用程序或数据库应该执行更新两台或多台联网计算机上的数据的事务?
我了解经典的银行示例;我更关心 Dynamo、Bigtable、HBase 或 Cassandra 等 Web 规模数据库中的分布式事务。
nhibernate - NHibernate - 分布式事务和提供您自己的连接导致异常
NHibernate 在参与分布式事务时抛出异常,并且您通过指定自己的连接对象打开了会话。
以下代码将重现该问题;参考当前的 FluentNibernate 和 NHibernate 2.1.2.4000。
.net - .net 检测分布式事务
在我的应用程序中,我使用以下模式调用数据库:
问题是 Operation1 和 Operation2 90% 的时间使用相同的数据库……但是当他们使用两个数据库时存在一些情况(错误)。如果事务变得分布式,我想得到一个异常。
如何检测事务是否提升为分布式事务?
谢谢,拉杜
oracle - 使用 ODAC 为 Oracle 中的事务登记两个连接时,使用分布式事务提交和选择之间的延迟/滞后
我们的应用程序使用两个连接(在整个应用程序中保持打开状态)调用两个 Oracle 数据库。对于某些功能,我们使用分布式事务。我们在连接字符串中有 Enlist=false 并手动登记到事务的连接。问题出现在这样一种情况下,我们在分布式事务中非常频繁地更新相同的记录,在这种情况下,我们看到在上一次运行中看到提交的数据存在延迟。
前任。
与上面的代码片段一样,我们在下一次迭代中更新并检查先前更新的值。当我们频繁地为单个记录运行此记录时会出现问题,即使在上一次迭代中已提交,我们也看不到在下一次迭代中的最后一次迭代中提交的更新。但是当这种情况发生时,这个更新在其他应用程序中会以非常小的延迟可见,即使在我们的代码中,如果我们要调试并再次运行该行,它也是可见的。即使先前的提交从代码返回,这几乎就像提交的延迟。任何人有任何想法?
.net - 如何检测 ServicedComponent 中的事务中止?
我正在尝试创建一个 System.EnterpriseServices.ServicedComponent 以参与分布式事务。我的主要方法如下所示:
我要做的是检测分布式事务是否已中止(或回滚),然后继续回滚我的更改。例如,我可能在磁盘上创建了一个文件,或者做了一些需要撤消的副作用。
我试图处理 SystemTransaction.TransactionCompleted 事件或在 Dispose() 方法中检查 SystemTransaction 的状态但没有成功。
我理解这类似于“补偿”而不是“交易”。
我正在尝试做的事情是否有意义?
java - 使用 Spring 从一个 EAR 文件调用事务安全到另一个文件的“正确”方法是什么?
我有两个 spring 应用程序 A 和 B,每个都在一个单独的 EAR 文件中。现在我想从 A 打电话给 B,反之亦然,甚至可能是 A -> B -> A 或更多。
调用必须是事务安全的。
推荐的方法是什么?
algorithm - 银行交易是如何“在幕后”运作的——可能是详细的
我想知道银行交易是如何运作的。很难找到一些至少可以接受的解释。我并不是说一些用于不那么严肃的业务的基本分布式事务算法。
那么银行必须采取什么样的措施来保持一致性,从不丢失一分钱。
国际交易,银行之间的交易呢?
整个世界的数据一致性——不要在纽约提取所有的钱,然后在东京再次重复..
在近代历史中记录的任何史诗般的失败?
我将非常感谢所有的答案。
sql - oracle global_names DELETE问题
我正在使用数据库链接在另一个数据库上执行 DELETE 语句,但数据库链接名称不符合全局命名,并且此要求无法更改。此外,我将 global_names 设置为 false,也无法更改。
但是,当我尝试使用这些链接时,我收到:
global_names=true
无法设置时的替代操作是什么?
干杯,
让
msmq - 来自 MSMQ 的 MaxConcurrentListeners 和远程事务读取
会不会是 DistributedTxMessageListenerContainer 上的 MaxConcurrentListereners 用处不大?我的印象是一次只有一个线程可以处理来自队列的消息。也许这是合乎逻辑的,因为只有在事务成功后才会从队列中删除消息。还是我在这里错了?