etting start部分 第三章:Data In,Data Out(续)elasticsearch并发控制相关
http://www.elastic.co/guide/en/elasticsearch/guide/current/version-control.html
Dealing with Conflicts
首先说明一下elasticsearch所能遇到的冲突的场景,比如两个用户同时更新一份数据这种情况。一般应用处理这种问题都是使用以下两种方式:
方式1:悲观锁,简单说就是每次都假设会发生冲突,当对元数据进行改变的时候,就会将源数据那行数据锁住,等到改变完成之后,才会打开锁。
方式2:乐观锁,这种锁与悲观锁相反,它假设每次都不会发生冲突,但是如果在es写和读的之间发生冲突,那么就会将更新操作就会失败,然后将错误反馈给应用去解决或者直接将错误返回给user。
http://www.elastic.co/guide/en/elasticsearch/guide/current/optimistic-concurrency-control.html
Optimistic Concurrency Control
elasticsearch是一个分布式系统,当一个document被创建,更新,或删除时新的version会被发到其它节点的副本上,es是 一个异步并发的系统,这意味着这些发送到副本的请求会在创建索引的时候发送到其他节点上,如果不对elasticsearch进行版本控制,那么这些 document的version变动会在到达其他节点的时候发生混乱,所以elasticsearch需要一种机制来控制这种情况。
我们可以使用_version来证明在我们的elasticsearch在处理版本冲突时所使用是乐观锁机制,在此之前,首先要了解我们可以指定 _version参数来更新我们想更新的document。 所以我们可以使用如下的步骤来验证elasticsearch的乐观锁机制:
步骤1:
创建一个document:
PUT /website/blog/1/_create
{
“title”: “My first blog entry”,
“text”: “Just trying this out…”
}
此时我们的document的_version是1
步骤2:
我们通过指定一个版本的来重新提交document,
发送如下请求:
PUT /website/blog/1?version=1
{
“title”: “My first blog entry”,
“text”: “Starting to get the hang of this…”
}
我们得到的响应:
{“_index”:”website”,”_type”:”blog”,”_id”:”1″,”_version”:2,”found”:true,”_source”:{“title”: “My first blog entry”, “text”: “Starting to get the hang of this…”}}
现在的版本已经变成了2。
步骤3:
再次发送步骤2的请求 即,我们再次指定version=1来更新document,那么我们就会得到下面这条响应:
{“error”:”VersionConflictEngineException[[website][2] [blog][1]: version conflict, current [2], provided [1]]“,”status”:409}
这条响应的意思是我们所指定的version为1的这条document现在的version已经是2,所以我们指定version为1的那个id的document与现在的最新的版本发生了冲突。说白了就是我们指定的version已经不是当前最新的version
使用系统额外版本号
我们可以使用其他数据库的version字段来作为elasticsearch的version,我们使用 version_type=external参数来指定系统额外的version。使用系统额外的version来防止版本冲突的机制和之前说的那种“检 验版本号是否相同”的机制有一点点的不同,这种使用系统外部version的机制是检验最新的版本号是不是大于之前的,如果不大于就会报出和刚才一样的错 误。
请求像如下这样:
PUT /website/blog/2?version=5&version_type=external
{
“title”: “My first external blog entry”,
“text”: “Starting to get the hang of this…”
}
响应略
总结一下:
1.elasticsearch使用的版本控制是乐观锁机制
2.使用elasticsearch自己内部维护的version来防止版本冲突是验证document的version是否相同
3.使用外部系统的version防止版本冲突,是通过验证最新更新的document的version是否大于之前的version。
zhidao.baidu.com/link?url=x3mHE5RllJdDmvMulO59vUtIZrBfMV5qB2I2-lpze7IUpDY9ABNvdxA_yV82-FqgBSY9bu4-bPddqwhl7IiOQq
相关推荐
elasticSearch权威指南 pdf 翻译版PDF高清版 电子书 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
Elasticsearch技术解析与实战+Elasticsearch权威指南两本电子书,合集共享,让你早日学习了解Elasticsearch
elasticsearch权威指南,高清,全面介绍了es的方方面面,从简单的安装到高级的机器学习特性
解其中最基本的概念, 从最基本的操作开始学习 Elasticsearch。之后,我们还会逐渐开始探索 更加高级的搜索技术,不断提升搜索体验来满足你的用户需求。 Elasticsearch 不仅仅只是全文搜索,我们还将介绍结构化搜索...
ELK stack权威指南分为三大部分,共19章。第一部分“Logstash”介绍Logstash的安装与配置、场景示例、性能与测试、扩展方案、源码解析、插件开发等,第二部分“Elasticsearch”介绍Elasticsearch的架构原理、数据...
ElasticSearch学习手册。是一个基于Lucene的搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,是当前流行的企业级搜索引擎。
由浅入深地讲解elasticsearch原理及查询语法。适合对elasticsearch有兴趣的朋友学习,而且非常清晰,排版也整齐,希望能帮助到大家。
非关系数据库elasticsearch学习书籍,通俗易懂,特别适合入门学习以及提升阅读
《Android开发权威指南》适合具备一定软件开发经验、想快速进入Android开发领域的程序员,具备一些手机开发经验的开发者和Android开发爱好者学习使用;也适合作为相关培训学校的Android培训教材。
Elasticsearch 2.1.1服务端集群搭建.及java客户端demo代码实现。Elasticsearch权威指南(中文版,Elasticsearch java api 学习入门源码部署相关资料
这本书可以学习ES的用法,非常不错,我在这个里面学习到了非常多的东西
Elasticsearch服务器开发(第2版),Elasticsearch技术解析与实战,ElasticSearch可扩展的开源弹性搜索解决方案,Elasticsearch权威指南(中文版),深入理解ElasticSearch,实战Elasticsearch、Logstash、Kibana++分布式...
《Android开发权威指南》适合具备一定软件开发经验、想快速进入Android开发领域的程序员,具备一些手机开发经验的开发者和Android开发爱好者学习使用;也适合作为相关培训学校的Android培训教材。 - 附目录 第一讲...
《Android开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45章精彩内容供读者学习。, 《Android开发权威指南(第二版)》全面介绍了...
免费Elasticsearch书籍 这是我个人收集的免费Elasticsearch书籍,请随时分享和学习。 书籍清单 您可以在此仓库的夹中找到以下列出的... Elasticsearch权威指南 Elasticsearch教程-tutorialspoint.com [下载] Elastics
ELK是Elasticsearch、Logstash、Kibana三个开源软件的组合,是目前开源界流行的实时数据分析方案,成为实时日志处理领域开源界的第壹选择。然而,ELK也并不是实时数据分析界的灵丹妙药,使用不恰当,反而会事倍功半...
Android开发权威指南 内容上涵盖了用最新的Android版本开发的大部分场景。全书分4个部分,分别从Android基础介绍、环境搭建、SDK介绍,到应用剖析、组件介绍、综合实例演示,以及符合潮流的、最新的移动开发技术,如...