美文网首页
5.8-处理并发读写

5.8-处理并发读写

作者: 落日彼岸 | 来源:发表于2020-04-06 19:51 被阅读0次

并发控制的必要性

并发控制
  • 两个 Web 程序同时更新某个⽂档,如果缺 乏有效的并发,会导致更改的数据丢失

  • 悲观并发控制

    • 假定有变更冲突的可能。会对资源加锁,防 ⽌冲突。例如数据库⾏锁
  • 乐观并发控制

    • 假定冲突是不会发⽣的,不会阻塞正在尝试 的操作。如果数据在读写中被修改,更新将 会失败。应⽤程序决定如何解决冲突,例如 重试更新,使⽤新的数据,或者将错误报告 给⽤户

    • ES 采⽤的是乐观并发控制

ES 的乐观并发控制

  • ES 中的⽂档是不可变更的。如果你更新⼀个⽂档,会将 就⽂档标记为删除,同时增加⼀个全新的⽂档。同时⽂档 的 version 字段加 1

  • 内部版本控制

    • If_seq_no + If_primary_term
  • 使⽤外部版本(使⽤其他数据库作为主要数据存储)

    • version + version_type=external
PUT products/_doc/1
{
  "title":"iphone",
  "count":100
}

res:
{
  "_index" : "products",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

本节知识点回顾

  • ES 采⽤的是乐观并发控制

  • 在需要控制并发的场景,通过指定 If_seq_no 和 If_primary_term

  • 外部版版本 version & version_type=external

课程DEMO

DELETE products
PUT products

PUT products/_doc/1
{
  "title":"iphone",
  "count":100
}



GET products/_doc/1

PUT products/_doc/1?if_seq_no=1&if_primary_term=1
{
  "title":"iphone",
  "count":100
}



PUT products/_doc/1?version=30000&version_type=external
{
  "title":"iphone",
  "count":100
}

相关文章

  • 5.8-处理并发读写

    并发控制的必要性 两个 Web 程序同时更新某个⽂档,如果缺 乏有效的并发,会导致更改的数据丢失 悲观并发控制假定...

  • redis

    redis Redis - 高并发,内存高速cache ,处理读写io的高并发容忍。 redis 通常被使用来将那...

  • redis

    Redis - 高并发,内存高速cache ,处理读写io的高并发容忍。 redis 通常被使用来将那些经常被访...

  • JUC (07)ReentrantReadWriteLock

    ReentrantReadWriteLock 可重入读写锁 功能概述: 并发处理过程中,避免不需要的锁等待,在数...

  • Java 容器 --- 并发一致性问题(ConcurrentHa

    并发读写数据一致性保证(Java并发容器) 写在前 业务开发过程,其实就是用户业务数据的处理过程,因而开发的核心任...

  • sync.Map && map

    面试题: 为什么map不能并发读写? map 并发读写会panic吗? map + lock 和 sync.Ma...

  • 处理高并发的方式

    处理高并发的方式: 多进程 多线程 缓存(本地,nosql) 主从(读写分离):主写从读 nginx负载均衡 fa...

  • MySQL 锁的一些概念

    在数据库系统中,每时每刻都会对数据库进行大量查询和数据操作,MySQL通过锁机制来进行并发控制 读写锁 在处理并发...

  • MongoDB高并发写场景开启读写分离读从库为何阻塞? 我们该如

    目录 MongoDB高并发写场景开启读写分离读从库为何阻塞? 我们该如何处理? MongoDB 4.0有哪些新特性...

  • Go sync.Map

    map并发读线程安全,并发读写线程不安全。 sync.Map 读写分离 空间换时间 Map Golang1.6之前...

网友评论

      本文标题:5.8-处理并发读写

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