ElasticSearch的并发控制问题
1.存储系统并发控制的基本解决思路
-
采用悲观锁
这种方式,是说我确定一定会有较大或者非常大的可能产生并发,那么我就对数据资源加锁,防止并发操作时产生的数据冲突,从而对一类数据进行顺序执行。
-
采用乐观锁
这是方式,是我假定并发不会发生或者很少发生,不会阻塞正在尝试的操作,如果数据在读写过程中被修改,更新就会失败,然后由应用程序来处理决定是否要进行冲突的解决以及解决的方式,例如重试、或者就默认更是失败。
2.ElasticSearch采用的并发控制
-
ElasticSearch采用的是第二种,乐观锁并发控制
-
ElasticSearch的乐观锁并发控制
- ElasticSearch的文档更新方式:我们知道,ElasticSearch的每个文档都是不可变的,如果要更新文档,其实是把源文档删除,同时增加一个全新的文档,并且把文档的version字段+1;
- 内部版本控制:采用_seq_no+_primary_term的方式进行并发控制;
- 使用外部版本控制:采用version+external的方式进行并发控制,注意这里是说不用es自己维护version,而是由外部程序来自己维护verison(这个version只能变大,不能变小哦);
-
正常的数据更新过程:应该是先查询出文档,然后再执行更新操作;
-
ElasticSearch乐观锁并发控制的实例
- 先创建一个文档
PUT accout/_doc/1 { "user_id": 2, "account_amout": 30 }结果:
{ "_index" : "

本文详细介绍了存储系统并发控制的基本思路,包括悲观锁和乐观锁。重点阐述了Elasticsearch采用的乐观锁策略,通过内部版本控制(_seq_no + _primary_term)和外部版本控制(version)确保数据一致性。通过示例展示了如何在更新操作中利用这些机制防止并发冲突,当版本不符时,更新操作会失败并返回错误信息。
最低0.47元/天 解锁文章
659

被折叠的 条评论
为什么被折叠?



