跳到主要内容

浅谈事务理解

用语
解释
查询泛指针对数据记录而执行的操作(,而非特指select)。
逻辑单元在功能或语义上紧密相关、共同完成某个特定任务的一组代指令。
领域人类知识或活动的逻辑边界。
事务所做的或要做的事情。
业务为特定群体创造价值而展开的活动。这些活动会受到所在行业(和企业)的规则流程所约束。
业务领域强调业务的范畴。
用例系统响应外部请求的潜在场景。定义角色与系统之间的交互步骤,和明确操作目的。
原子性不可分割的整体。在软件开发中,通常用来表达一种“要么同时成功,否则就应该同时失败”的语义。
准确性一种衡量计算结果与真实结果之间的差异的度量概念。
一致性关于“一致性”一词,在不同的上下文中会有不同的解释。此处可理解为确保数据的约束规则 不会遭到破坏
数据完整性在数据的整个生命周期内,维护和保证其准确性一致性
最终一致(性)无法马上确保数据完整性,但承诺最终会做到这一点(只是时间上会稍有延迟)。

在谈论事务之前,务必先搞清楚事务到底是一个什么概念。或者说,应该从什么角度来理解它才更为妥当。 譬如技术人员谈论事务时,通常谈论的是数据库事务。此时可将事务理解为是数据库查询的逻辑单元。它由一到多个查询组成,是一个不可分割的整体。 而对于业务人员而言,他们谈论的其实是业务领域事务。此时事务代表着一个完整的业务范畴。例如对于电商行业而言,顾客的购物过程就属于一个事务。它涵盖了选择商品加入购物车下单支付商家发货签收评价等流程。

对于系统设计而言,事务其实是一种保证系统正确性的机制。作为设计者,我们应该关心的是应用事务应用事务通常以系统用例为逻辑边界;它真正关心的是请求处理过程的原子性。 如果进程能够独自完成事务,那么可将其称为本地事务,否则就属于分布式事务。前者通常可以直接透过数据库事务来实现,而后者则需要依赖特定的原子提交协议1设计模式才能解决。

重点注意。缺乏经验的设计者经常存在一个误区,认为系统必须实现应用事务才能确保数据完整性。然而并非如此。是否需要(应用)事务,其实完全取决于用例本身的严谨程度。 通常情况下,只有涉及到金钱健康安全决策等问题时,系统才会对数据完整性要求苛刻。而在数据完整性要求不高的用例中(如 社交网络内容系统数据分析事务机制就不是必须的。因为即便处理过程发生意外,但最终也会因为重新计算而达到最终一致。

Dik Tam
作者
Dik Tam
只是喜欢写代码。