用于搜索肯定存在并发的问题,当多个用户操作多个文档时,很容易出现数据不一致的问题.
- 原理:
- es采用了乐观锁来保证数据的一致性.
- 当用户对document进行操作(增删改)时,并不需要对该document作加锁和解锁的操作,只需要指定要操作的版本即可.
- 可以简单的理解为:用户每次操作这个文档,版本号都会+1,当出现并发情况时,这个用户到底能不能执行,就看当前用户的版本号是否跟文档的版本号一致.
- 当版本号一致时,es会允许该操作顺利执行,而当版本号存在冲突时,es会提示冲突并抛出异常(VersionConflictEngineException异常).
- 内部版本控制:
- 使用的是_version字段.
- es的版本号的取值范围为1到2^63-1.
(1). 内部版本不一致:
curl -XPUT "localhost:9200/lib/user/1?version=3&pretty" -H 'Content-Type: application/json' -d'{
"name": "David",
"age": 30,
"interests": ["music", "driver"]
}'
注:
①. 查看到版本是3,手动添加version=5字段,表示版本不一致.