解决并发问题
https://www.elastic.co/guide/cn/elasticsearch/guide/current/concurrency-solutions.html
问题的原因是 Elasticsearch 不支持 ACID 事务。 对单个文件的变更是 ACIDic 的,但包含多个文档的变更不支持。
如果你的主要数据存储是关系数据库,并且 Elasticsearch 仅仅作为一个搜索引擎 或一种提升性能的方法,可以首先在数据库中执行变更动作,然后在完成后将这些变更复制到 Elasticsearch。 通过这种方式,你将受益于数据库 ACID 事务支持,并且在 Elasticsearch 中以正确的顺序产生变更。 并发在关系数据库中得到了处理。
如果你不使用关系型存储,这些并发问题就需要在 Elasticsearch 的事务水准进行处理。 以下是三个切实可行的使用 Elasticsearch 的解决方案,它们都涉及某种形式的锁:
全局锁
文档锁
树锁
Elasticsearch-对并发冲突的解决(乐观锁、悲观锁)
https://blog.csdn.net/u011262847/article/details/78118142
初识elasticsearch解决并发问题
https://blog.csdn.net/qq_37910578/article/details/81709411
通过查询资料,多进程并发操作ES,有如下两种方式:
1. 悲观锁
在访问数据时,先进行加锁操作,如果有其他进程占有锁,则操作失败,等待重试。
锁的级别上有全局锁、文档锁、树锁。
悲观锁的优点:方便,直接加锁,对外透明,不需要额外的操作。
悲观锁的缺点:并发能力低,同一时间只能有一个操作。
2. 乐观锁
每次修改文档时,无需加锁,通过比对文档的version版本号控制顺序。
乐观锁的优点:并发能力高,不用加锁。
乐观锁的缺点:每次更新数据需要判断一下版本号,操作复杂,可能需要执行多次(查询,计算,写入)操作,直到跟新成功。
探究 | Elasticsearch不支持事务有什么好的弥补方案吗?
https://blog.csdn.net/laoyang360/article/details/81052892