Es的数据并发冲突
ES 数据并发冲突控制是基于的乐观锁和版本号的机制
一个document第一次创建的时候,它的_version内部版本号就是1;以后,每次对这个document执行修改或者删除操作,都会对这个_version版本号自动加1;哪怕是删除,也会对这条数据的版本号加1(假删除)。
- 对于更新操作 客户端对es数据做更新的时候,如果带上了版本号,那带的版本号与es中文档的版本号一致才能修改成功,否则抛出异常。如果客户端没有带上版本号,首先会读取最新版本号才做更新尝试,这个尝试类似于CAS操作,可能需要尝试很多次才能成功。乐观锁的好处是不需要互斥锁的参与。 es节点更新之后会向副本节点同步更新数据(同步写入),直到所有副本都更新了才返回成功。
- 对于写操作,一致性级别支持 quorum/one/all,默认为 quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。 one:要求我们这个写操作,只要有一个primary shard是active活跃可用的,就可以执行 all:要求我们这个写操作,必须所有的primary shard和replica shard都是活跃的,才可以执行这个写操作 quorum:默认的值,要求所有的shard中,必须是大部分的shard都是活跃的,可用的,才可以执行这个写操作
- 对于读操作,可以设置 replication 为 sync(默认),这使得操作
本文转载自: https://blog.csdn.net/huanglu0314/article/details/130305994
版权归原作者 追梦鹿少年 所有, 如有侵权,请联系我们删除。
版权归原作者 追梦鹿少年 所有, 如有侵权,请联系我们删除。