|
|
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。 有时程序员试图获得数据库的好处(它是事务性的、并行的、分布式的),但却保留了大量的数据。然后他们需要手动添加一些数据库功能。 |
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |