The*_*ude 2 java multithreading elasticsearch
我有一个在不同线程上接收事件的应用程序,每个事件都被处理,格式化为不同的属性,并保存到 ElasticSearch 中。当特定属性值首次出现在任何事件上时,我想在我的数据库中添加一个新条目(每个事件读取所有以前的事件并验证该值尚未出现)。由于应用程序的多线程特性,我需要某种方式来验证我是否在第一次遇到该属性时添加了条目,并且只添加了一次。我想到的最佳解决方案是某种乐观锁定(确保在我提交之前没有其他线程为此属性添加了条目)。对此是否有任何 ElasticSearch 支持?
是的,Elasticsearch 提供了处理冲突的支持,您可以阅读 Elasticsearch 官方https://www.elastic.co/guide/en/elasticsearch/guide/master/version-control.html文档,其中详细解释了这一点。
如果我们没有正确处理冲突,它可能会导致丢失更新问题以及如何处理它们解释如下
在数据库世界中,通常使用两种方法来确保在进行并发更新时不会丢失更改:
悲观并发控制:这种方法被关系数据库广泛使用,它假设可能会发生冲突的更改,因此会阻止对资源的访问以防止冲突。一个典型的例子是在读取数据之前锁定一行,确保只有放置锁定的线程才能更改该行中的数据。
乐观并发控制由 Elasticsearch 使用,这种方法假设冲突不太可能发生并且不会阻止操作的尝试。但是,如果底层数据在读写之间被修改过,更新就会失败。然后由应用程序决定如何解决冲突。例如,它可以使用新数据重新尝试更新,或者可以向用户报告情况。
好消息是 Elasticsearch 支持乐观锁定,因此不会锁定所有文档并提供更好的性能,您可以阅读他们的官方文档https://www.elastic.co/guide/en/elasticsearch/guide/master/乐观并发控制.html关于如何实现这一点。
如果您清楚并有任何疑问,请告诉我。
归档时间: |
|
查看次数: |
3092 次 |
最近记录: |