Elasticsearch核心技术与实战学习笔记 44 | 处理并发读写操作

一 序

   本文属于极客时间Elasticsearch核心技术与实战学习笔记系列。

二 并发控制的必要性

 两个 Web 程序同时更新某个文档,如果缺乏有效的并发,会导致更改的数据丢失
悲观并发控制

  • 假设有变更冲突的可能,会对资源加锁,防止冲突。例如数据库行锁

乐观并发控制

  • 假设突然是不会发生的,不会阻塞正在尝试的操作。如果数据在读写中被修改,更新将会失败。应用程序决定如何解决冲突,例如重试更新,使用新的数据,或者将错误报告给用户
  • ES 采用的乐观并发控制

例子是举了销售商品扣减库存的。

2.1 ES 的乐观并发控制

ES 中的文档是不可变更的。如果你更新一个文档,会将会文档标记为删除,同时增加一个全新当文档,同时文档的 version 字段加 1

内部版本控制(老版本,已经被废除)

  •  If_seq_no + If_primary_term(推荐)

使用外部版本(使用其他数据库作为主要数据存储)

  • version + version_type = external

demo

数据准备

尝试去更新:

假设有别的用户也去更新

会提示错误,也就说版本号只能执行一次

如果使用数据库同步数据的场景,则可以使用version_type的方式更新

猜你喜欢

转载自blog.csdn.net/bohu83/article/details/106976891
44