美文网首页
elasticsearch乐观锁

elasticsearch乐观锁

作者: 念䋛 | 来源:发表于2021-08-12 09:24 被阅读0次
悲观锁和乐观锁

1、悲观并发控制
这种方法被关系型数据库广泛使用,它假定有变更冲突可能发生,因此阻塞访问
资源以防止冲突。 一个典型的例子是读取一行数据之前先将其锁住,确保只有放
置锁的线程能够对这行数据进行修改。
2、乐观并发控制
Elasticsearch 中使用的这种方法假定冲突是不可能发生的,并且不会阻塞正在
尝试的操作。 然而,如果源数据在读写当中被修改,更新将会失败。应用程序接
下来将决定该如何解决冲突。 例如,可以重试更新、使用新的数据、或者将相关
情况报告给用户。

POST和PUT的介绍

1.更新:PUT会将新的json值完全替换掉旧的;而POST方式只会更新相同字段的值,其他数据不会改变,新提交的字段若不存在则增加,原有字段如果在新提交的字段中没有,则字段会丢失,这里就要使用_update
2.PUT和DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。比如用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有什么不同,DELETE也是一样。
3.POST操作不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建了若干的资源。
4.创建操作可以使用POST,也可以使用PUT,区别就在于POST是作用在一个集合资源(/user)之上的,而PUT操作是作用在一个具体资源之上的(/user /123)。
提到过POST和PUT新增字段在原有字段中没有,原有的字段就消失了_update可以单独更新某个数据.

_seq_no和_primary_term介绍
  1. _version表示当前数据新的版本号;老版本使用
  2. _seq_no其实和version同一个道理,一旦数据发生更改,数据也一直是累计的;_seq_no是全局加一
  3. _primary_term表示是由谁分配的,意思说如果文档在一个集群里面,文档肯定会被分配一个位置,_primary_term表示的就是一个位置;
PUT和POST在操作数据的时候_seq_no都会加1

PUT操作

PUT /my_doc/_doc/1
{
"id": 1,
"name": "张三"
 }

POST操作

POST /my_doc/_doc/1
{
"id": 1,
"name": "张三"
 }

_seq_no都会加一

{
  "_index" : "my_doc",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 40,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no " : 39,
  "_primary_term" : 1
}

当POST结合_update使用的时候,如果值没有发生变化, _seq_no不会加一

POST /my_doc/_update/1
 {
 "doc": {
 "name": "李四1"
 }

使用乐观锁

POST /my_doc/_update/1/?if_seq_no=1&if_primary_term=1
 {
 "doc": {
 "name": "张三"
 }
 }

如果_seq_no与_primary_term当前文档不一致的时候

{
  "error" : {
    "root_cause" : [
      {
        "type" : "version_conflict_engine_exception",
        "reason" : "[1]: version conflict, required seqNo [1], primary term [1]. current document has seqNo [40] and primary term [1]",
        "index_uuid" : "pZXBlHMoSrG-s_ovuFGKtQ",
        "shard" : "0",
        "index" : "my_doc"
      }
    ],
    "type" : "version_conflict_engine_exception",
    "reason" : "[1]: version conflict, required seqNo [1], primary term [1]. current document has seqNo [40] and primary term [1]",
    "index_uuid" : "pZXBlHMoSrG-s_ovuFGKtQ",
    "shard" : "0",
    "index" : "my_doc"
  },
  "status" : 409
}

相关文章

网友评论

      本文标题:elasticsearch乐观锁

      本文链接:https://www.haomeiwen.com/subject/ngbxbltx.html