ElasticSearch版本控制

普通关系型数据库使用的是(悲观并发控制(PCC))
当我们在读取一个数据前先锁定这一行,然后确保只有读取到数据的这个线程
可以修改这一行数据
ES使用的是(乐观并发控制(OCC))
ES不会阻止某一数据的访问,然而,如果基础数据在我们读取和写入的间隔中
发生了变化,更新就会失败,这时候就由程序来决定如何处理这个冲突。它可
以重新读取新数据来进行更新,又或者将这一情况直接反馈给用户。
ES如何实现版本控制(使用es内部版本号)
1:首先得到需要修改的文档,获取版本(_version)号
curl -XGET http://localhost:9200/elasticsearch/emp/1
2:在执行更新操作的时候把版本号传过去
curl -XPUT http://localhost:9200/elasticsearch/emp/1?version=1 -d
‘{“name”:“zs”,”age”:25}’(覆盖)
curl -XPOST http://localhost:9200/elasticsearch/emp/1/_update?version=1 -d
‘{“doc”:{“city”:”beijing”,”car”:”BMW”}}’(部分更新)
3:如果传递的版本号和待更新的文档的版本号不一致,说明在读取和写入的间隔数据发生了变化,则会更新失败
• ES如何实现版本控制(使用外部版本号)
如果你的数据库已经存在了版本号,或者是可以代表版本的时间戳。这时就可以在es的查询url后面添加version_type=external来使用这些号码。
注意:版本号码必须要是大于0小于9223372036854775807(Java中long的最大正值)的整数。
es在处理外部版本号的时候,它不再检查_version是否与请求中指定的数值是否相等,而是检查当前的_version是否比指定的数值小,如果小,则请求成功。
example:
curl -XPUT
‘http://localhost:9200/yaohuaji/emp/20?version=10&version_t
ype=external’ -d ‘{“name”: “zs”}’
注意:此处url前后的引号不能省略,否则执行的时候会报错

你可能感兴趣的:(ElasticSearch)