一、不同版本mongo事务对部署方式的要求
mongo从4.0版本开始支持事务,需集群部署,且具体版本对事务支持有差异,单机mongo不支持事务。
4.0~4.1:需副本集模式(replica sets)支持事务
≥4.2:副本集模式(replica sets)和分片集模式(sharded clusters)都支持事务
二、事务写冲突
使用mongo4.4事务时,发现并发情况下事务极易报写冲突异常(write conflict),导致回滚,mongo官方新的事务写法withTransaction已经处理该异常,但是看了下它的处理逻辑就只是不断重试(而且仔细看其写法有逻辑bug),该处理方式对于效率影响巨大,网上有人反馈过v4.2事务正常,升级v4.4后出现此问题。但是项目已经后期不能降版本,所以也未验证v4.2。该问题直接导致4.4事务基本不可用,仅在少数非并发或效率要求低的场景可用。
三、读偏好ReadPreference
优先级:事务级>会话级>客户端级,客户端默认primary(其他参数优先级同此)
指定读取操作从副本集读取的方式。
可设置以下级别:
primary:默认。所有操作均从主节点读取。
primaryPreferred:优先从主节点读取,主节点不可用时从次级节点读取。
secondary:所有操作均从次级节点读取。
secondaryPrefer