es数据频繁的更新_es之文档更新过程中并发冲突问题

本文详细介绍了在Elasticsearch中处理数据频繁更新时的并发冲突问题,包括乐观锁(_version控制)、外部版本控制(version_type=external)、重试提交(retry_on_conflict)以及悲观锁(全局锁和文档锁)。这些策略用于确保在分布式异步并发场景下,数据操作的正确性和一致性。
摘要由CSDN通过智能技术生成

1:乐观锁控制

ES是分布式的,也是异步并发的,我们的复制请求是并行发送的;这就意味着请求到达目的地的顺序是不可控制的,是乱序的;

如果是乱序的方式,很有可能出现这样的一个问题,新version的文档被旧version的文档覆盖掉—-数据丢失,或者直接抛异常;

TransportClient client = null;

@Before

public void testConn(){

try {

Settings settings = Settings.builder()

.put("cluster.name", "cluster_es").build();

client = new PreBuiltTransportClient(settings)

.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("hadoop01"), 9300));

System.out.println("========连接成功=============");

} catch (UnknownHostException e) {

e.printStackTrace();

}

}

/**

* upsert

* */

@Test

public void upsertDocument2() throws InterruptedException {

ExecutorService executorService = Executors.newFixedThreadPool(3);

for (int i = 0; i < 10; i++){

executorService.execute(new Thread1());

}

Thread.sleep(10000);

executorService.shutdown();

}

class Thread1 implements Runnable {

public void run() {

System.out.println("*************" + Thread.currentThread().getName() + " *************");

// 设置查询条件, 查找不到则添加

IndexRequest indexRequest = null;

try {

indexRequest = new IndexRequest("website", "blog", "1")

.source(XContentFactory.jsonBuilder()

.startObject()

.field("id", "1")

.endObject());

// 设置更新, 查找到更新下面的设置

UpdateRequest upsert = new UpdateRequest("website", "blog", "1")

.doc(XContentFactory.jsonBuilder()

.startObject()

.field("process_id", Thread.currentThread().getId())

.endObject())

.upsert(indexRequest);

client.update(upsert).get();

} catch (Exception e) {

e.printStackTrace();

}

}

}

@After

public void close(){

client.close();

}

所以在分布式异步并发场景中,需要一种方式:新版本的文档不会被旧版本的文档覆盖——【乐观锁】

Elasticsearch使用这个 _vers

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值