QLDB多execute_lambda调用下并发添加二级所有者是否触发序列化冲突
AWS QLDB并发写入冲突与事务边界问题解答
首先明确QLDB的核心事务机制:每个driver.execute_lambda调用对应一个独立的ACID事务,QLDB采用乐观并发控制(OCC)做冲突检测,仅会在单个事务提交时校验该事务的读、写集合是否和其他已提交事务产生版本冲突。
拆分三个函数到独立execute_lambda调用时,并发添加二级所有者会不会触发序列化冲突?
会,但冲突只会发生在执行add_secondary_owner_for_vin的写事务阶段,和前面两个读操作的事务无关。
两个并发请求的写事务如果修改的是同一个车辆文档的相同基准版本,QLDB会检测到版本冲突,直接拒绝其中一个事务的提交,返回序列化冲突错误。你之前的假设错误点在于:并非只有将三个逻辑放到同一个事务才会触发冲突,任意两个修改了同一文档同一版本的独立写事务都会触发冲突。
将多个函数合并到同一个execute_lambda的收益是否只有性能提升?
不是,性能提升只是附加收益,最核心的收益是强一致性保障。
如果将三个逻辑拆分到三个独立事务,会存在读快照不一致的风险:比如你在第一个事务中查询到的文档ID、第二个事务中查询到的所有者状态,都有可能在你第三个写事务提交前被其他事务修改,而独立事务之间没有关联,写事务不会校验之前读操作的结果是否已经过期,很容易写出不符合业务逻辑的脏数据。
而把三个逻辑放到同一个execute_lambda中时,整个事务的读、写操作会共享同一个一致性快照,提交时QLDB会校验整个事务生命周期内所有读取过的数据、要写入的数据是否和其他已提交事务冲突,只要有任何一个读取的数据集发生了变更,整个事务都会提交失败,完全避免基于过期数据做写入的问题,符合业务逻辑的正确性要求。
内容的提问来源于stack exchange,提问作者ljiatu
相关产品推荐
相关产品推荐

