elasticsearch--并发问题
- 悲观锁
- 乐观锁
悲观锁
对于一个共享数据,某个线程访问到这个数据的时候,会认为这个数据随时有可能会被其他线程访问而造成数据不安全的情况,因此线程在每次访问的时候都会对数据加一把锁。这样其他线程如果在加锁期间想访问当前数据就只能等待,也就是阻塞线程了。
乐观锁
乐观锁的并不是真的加了一把锁。乐观锁机制表示线程在每次操作数据的时候,都乐观的认为不会有其他线程来会来操作当前数据,因此不加锁但是乐观锁在每次更新数据的时候都会通过比对版本号来检查当前数据是不是被其他线程修改过。如果没有,则正常修改数据并且更新数据版本号,否则,仅更新自身版本号.
悲观锁、乐观锁 如何选择
首先,悲观锁和乐观锁没有孰优孰劣,他们各自有各自的适用场景
当并发写入数量较少的情况,乐观锁因为并没有真正的去上锁,从而避免频繁的上锁、释放锁而带来的性能开销,从而提升了吞吐性能
当并发写入量较大的时候,线程之间竞争激烈,就会导致线程频繁的尝试,每次尝试都要进行版本号比对,尝试失败还要更新自身携带的版本号,这样反复尝试积累的性能损耗可能已经超过了使用直接加锁然后将线程挂起而带来的损耗,
此时使用悲观锁更加合适。
ES中的并发控制
版本号
seq_no 和 primary_term
if seq no 和if primary term
版本号 _version
本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/17399624.html