![]() |
1
2
我认为没有设计模式可以解决这个问题本身。良好的数据库设计、良好的存储过程编程,特别是学习如何使事务保持简短,将缓解大多数问题。 但是,没有100%的方法可以保证没有问题。 不过,基本上在我职业生涯中见过的每一种情况下,通过修复存储过程可以解决死锁和速度减慢的问题:
|
![]() |
2
2
从长远来看,使用共享资源是错误的。因为通过重用现有的环境,你正在创造越来越多的可能性。只需回顾一下繁忙的beavers:)erlang的方式是生成容错且易于验证的系统的正确方式。 但是事务内存对于许多广泛使用的应用程序来说是必不可少的。例如,如果你咨询一家拥有数百万客户的银行,你就不能仅仅为了效率而复制数据。 我认为单子是一个很酷的概念来处理改变状态的困难概念。 |
![]() |
3
0
我听说过的一种方法是创建一个只插入版本的模型,在这个模型中永远不会发生更新。在选择期间,版本仅用于选择最新的行。我知道这种方法的一个缺点是数据库可以很快地变得相当大。 我也知道一些解决方案,比如FogBugz,不使用强制外键,我相信这也有助于减轻这些问题,因为SQL查询计划可以在选择或更新期间锁定链接表,即使其中没有数据改变,如果它是一个高度争用的表,它会增加死锁或超时的几率。 我对这些方法不太了解,因为我从来没有使用过它们,所以我假设每种方法都有我不知道的优点和缺点,以及一些我从未听说过的其他技术。 我也在查卡洛·佩西奥的资料 recent post 很不幸,我没有足够的时间做这件事,但是材料看起来很有趣。 |
![]() |
4
0
如果你在这里说的是“云计算”,那么答案就是将每个事务本地化到它在云中发生的地方。 整个云不需要保持一致,因为这会降低性能(如您所述)。简单地说,当更改通过系统传播时,跟踪更改内容以及在何处处理多个小事务。 在云的另一端,用户a更新记录r和用户b的情况与用户a在当前严格事务环境中还没有进行更改的情况相同。这可能会导致更新繁重的系统中出现差异,因此系统的架构应尽可能少地使用更新—将数据移动到聚合中,并在准确的数字至关重要时(即将一致性要求从写入时间移动到关键读取时间)。 好吧,就我的观点。在这种情况下,很难设想一个与应用程序无关的系统。 |
![]() |
5
0
尝试在数据库级别以尽可能少的指令进行更改。 一般规则是在最短的时间内锁定资源。使用Oracle或任何类似的方式使用T-SQL、PLSQL、Java,可以减少每个事务锁定共享资源的时间。事实上,数据库中的事务使用行级锁、多版本和其他智能技术进行优化。如果您可以在数据库中进行事务,则可以节省网络延迟。除了其他层,如odbc/jdbc/olebd。 有时程序员试图获得数据库的好处(它是事务性的、并行的、分布式的),但却保留了大量的数据。然后他们需要手动添加一些数据库功能。 |
![]() |
Sweepy Dodo · JSON lite的格式化 7 月前 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 8 月前 |
![]() |
Zegarek · Postgresql递归查询未提供预期结果 8 月前 |
![]() |
Joe · 为什么这两个查询之间的性能存在如此大的差异? 12 月前 |
![]() |
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 12 月前 |