交易什么时候成为负担而不是利益?

sql performance design-patterns transactions

312 观看

5回复

761 作者的声誉

在这个时代,交易编程是现代发展的主要内容。并发性和容错性对于应用程序的使用寿命至关重要,因此,事务逻辑变得易于实现。随着应用程序的增长,似乎事务代码在应用程序的可伸缩性方面变得越来越繁重,当您跨接到分布式事务和镜像数据集时,问题开始变得非常复杂。我很好奇,在数据大小或应用程序复杂性方面,交易经常开始成为问题的根源(导致超时,死锁,关键任务代码中的性能问题等)更难以修复,排除故障或者解决方法而不是设计一个本身更具容错能力的数据模型,或使用其他方法确保数据完整性。此外,哪些设计模式可以最大限度地减少这些影响或使标准事务逻辑过时或无问题?

-

编辑:到目前为止,我们已经得到了一些合理质量的答案,但我想我会自己发布一个答案来提出我听过的一些事情,试图激发一些额外的创造力; 我得到的大部分回答都是对问题的悲观看法。

另一个重要的注意事项是,并非所有死锁都是程序编码不良的结果; 有时,任务关键型操作依赖于不同订单中的类似资源,或者不同查询中的复杂连接相互衔接; 这个问题有时似乎是不可避免的,但我一直是重新工作流程的一部分,以促进不太可能导致执行顺序的执行顺序。

作者: TheXenocide 的来源 发布者: 2008 年 9 月 17 日

回应 (5)


2

23913 作者的声誉

我认为没有设计模式本身可以解决这个问题。良好的数据库设计,良好的商店程序编程以及特别是学习如何保持交易简短将缓解大多数问题。虽然没有100%保证没有问题的方法。

在我职业生涯中看到的每一个案例中,死锁和减速都是通过修复存储过程来解决的:

  • 确保按顺序访问所有表以防止死锁
  • 修复索引和统计数据可以使一切更快(从而减少死锁的可能性)
  • 有时没有真正的交易需求,它只是“看起来”像它
  • 有时可以通过在单个语句中创建多个语句存储过程来消除事务。
作者: Sklivvz 发布者: 17.09.2008 09:30

2

464 作者的声誉

从长远来看,共享资源的使用是错误的。因为通过重用现有环境,您正在创造越来越多的可能性。只需查看忙碌的海狸:) Erlang的方式是生成容错且易于验证的系统的正确方法。

但事务性内存对于广泛使用的许多应用程序至关重要。例如,如果您咨询拥有数百万客户的银行,您不能仅为了提高效率而复制数据。

我认为monads是一个很酷的概念来处理改变状态的困难概念。

作者: Roman Glass 发布者: 17.09.2008 09:34

0

34298 作者的声誉

如果您在这里谈论“云计算”,那么答案就是将每个事务本地化到它在云中发生的位置。

整个云不需要保持一致,因为这会破坏性能(如您所述)。简单地说,随着更改在系统中传播,跟踪更改的内容和位置以及处理多个小事务。

用户A在云的另一端更新记录R和用户B的情况(尚未)与用户A在当前严格事务环境中尚未进行更改的情况相同。这可能会导致更新系统出现差异,因此应该对系统进行架构设计,以便尽可能少地处理更新 - 一旦确切的数字变得至关重要(即移动一致性要求),就会将数据移动到数据聚合并提取聚合数据从写入时间到临界读取时间)。

好吧,只是我的POV。在这种情况下,很难设想出与应用程序无关的系统。

作者: Milan Babuškov 发布者: 17.09.2008 09:36

0

7177 作者的声誉

尝试在尽可能少的指令中在数据库级别进行更改。

一般规则是尽可能地锁定资源。在Oracle上使用T-SQL,PLSQL,Java或任何类似的方式,您可以减少每个事务锁定共享资源的时间。事实上,数据库中的事务是使用行级锁,多版本和其他类型的智能技术进行优化的。如果您可以在数据库中进行事务,则可以节省网络延迟。来自其他层的公寓,如ODBC / JDBC / OLEBD。

有时程序员试图获取数据库的好东西(它是事务性的,并行的,分布式的),但保留数据的快照。然后他们需要手动添加一些数据库功能。

作者: borjab 发布者: 17.09.2008 10:52

0

761 作者的声誉

我听说过的一种方法是制作一个版本化的仅插入模型,其中不会发生任何更新。在选择期间,版本用于仅选择最新的行。我知道使用这种方法的一个缺点是数据库可以非常快地变得相当大。

我也知道一些解决方案,例如FogBugz,不使用强制外键,我认为这也有助于缓解这些问题,因为SQL查询计划可以在选择或更新期间锁定链接表,即使没有数据发生变化它们,如果它是一个高度争用的表被锁定,它可以增加DeadLock或Timeout的机会。

我不太了解这些方法,因为我从来没有使用它们,所以我认为每个我都不知道的优点和缺点,以及我从未听说过的其他一些技巧。

我也一直在研究Carlo Pescio 最近发表的一些材料,遗憾的是我没有足够的时间来做正义,但材料似乎非常有趣。

作者: TheXenocide 发布者: 19.09.2008 04:24
32x32