4.4.2 合并同时写入的值

该算法可确保不会发生数据丢弃,但客户端要做额外工作:若多个操作并发,则客户端必须通过合并并发写入的值来继承旧值。

合并本质和多节点复制中的冲突解决类似,即处理写冲突。一个简单方案:基于版本号或时间戳(即最后写入胜利)选择一个值,但这意味着会丢失数据。所以,需要在应用程序代码中做额外工作。

如购物车,合理的合并并发值是包含新值和旧值。在图-14中,两个客户端最后的值是[牛奶,面粉,鸡蛋,熏肉]和[鸡蛋,牛奶,火腿]。虽然牛奶、鸡蛋在两个客户端都出现了,虽然只写入了一次。合并最终值应该是[牛奶,面粉,鸡蛋,培根,火腿],其中去掉了重复值。

设想人们也可以从他们的购物车删除商品,此时把并发值都合并起来可能会导致错误结果:若合并了两个客户端的值,且其中有一个商品被某客户端删掉,则被删除的项目会再次出现在合并的最终值中。为防止该问题,项目在删除时不能简单从DB删除,系统必须保留一个对应版本号以恰当的标记该项目需要在合并时被删除。这种删除标记被称为墓碑(逻辑删除)。

考虑到应用程序代码中合并非常复杂且易出错,可设计一些数据结构自动执行合并。

4.4.3 版本向量

图-13示例只有一个副本。若存在多个副本但无主节点,算法该如何修改?

图-13使用单个版本号来捕获操作之间的依赖关系,当多个副本同时接受写入时,这不够。因此,需要为每个K、每个副本都定义一个版本号。每个副本在处理写入时,增加自身版本号,并跟踪从其他副本中看到的版本号。通过这些信息指示要覆盖哪些值、保留哪些并发值。

所有副本的版本号集称为版本向量。与图-13版本号一样,当读数据时,版本向量会从数据库副本发送到客户端,随后写入值时需将版本信息包含在请求中一起发送回数据库。版本向量使得DB 可以区分应该覆盖写还是保留并发值。

就像单副本,应用程序仍需执行合并操作。版本向量可确保从某副本读取,随后写入到另一个副本。这些值可能导致在其他副本上衍生出新的兄弟值,但至少不会丢失数据且能正确合并所有并发值。

版本向量和向量时钟

版本向量有时也称为矢量时钟,但不完全相同,简而言之,需要比较副本状态时,应使用版本向量。

并发性,时间和相对性(2)相关推荐

  1. CUDA 7 流并发性优化

    CUDA 7 流并发性优化 异构计算是指高效地使用系统中的所有处理器,包括 CPU 和 GPU .为此,应用程序必须在多个处理器上并发执行函数. CUDA 应用程序通过在 streams 中执行异步命 ...

  2. CUDA 7 Stream流简化并发性

    CUDA 7 Stream流简化并发性 异构计算是指高效地使用系统中的所有处理器,包括 CPU 和 GPU .为此,应用程序必须在多个处理器上并发执行函数. CUDA 应用程序通过在 streams ...

  3. Access自动编号 违反并发性原因解析

    近日,客户在使用软件过程中反映,在添加一条新客户记录后,存盘时,系统给出一个"系统无法处理的异常"的错误提示,无法保存该条记录. 根据客户的反馈,经过长达数小时的跟踪和确认,终于将 ...

  4. 探索 ConcurrentHashMap 高并发性的实现机制

    简介 ConcurrentHashMap 是 util.concurrent 包的重要成员.本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体 ...

  5. DB2 9 根蒂根基底细(730 考试)认证指南,第 6 局部: 数据并发性(5)

    锁和机能 锁兼容性 假设数据本钱上的一种锁形态允许在同一本钱上布置另一个锁,就感受这两种锁(或两种形态)是兼容的.每当一个事项持有数据本钱上的锁,而第二个事项哀告同一本钱上的锁时,DB2 数据库管理按 ...

  6. java并发性是指什么_java – 什么是“非阻塞”并发,它与普通并发性有什么不同?...

    What is Non-blocking Concurrency and how is it different. 正式: In computer science, non-blocking sync ...

  7. 操作系统-并发性:互斥与同步

    知识架构 操作系统设计中的核心问题是进程和线程的管理 那么关于进程和线程的管理涉及到的问题就包括: 多道程序设计技术:管理单处理器系统中的多个进程. 多处理器技术:管理多处理器系统中的多个进程. 分布 ...

  8. 提高代码性能及并发性的方法浅谈

    最近在做系统调优,总结了下cache相关知识,以及如何提高性能和并发性能的方法. 一CACHE相关 1. cache概述 cache,中译名高速缓冲存储器,其作用是为了更好的利用局部性原理,减少CPU ...

  9. 探索 ConcurrentHashMap 高并发性的实现机制--转

    ConcurrentHashMap 是 Java concurrent 包的重要成员.本文将结合 Java 内存模型,来分析 ConcurrentHashMap 的 JDK 源代码.通过本文,读者将了 ...

  10. 并发基础篇(一): Java 并发性和多线程

    说在前面 介绍文章之前,先给出一个多线程的思维导图, 后续的文章就根据思维导图来一步一步的分析java多线程的知识. 一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多 ...

最新文章

  1. python gui界面设置数据储存在哪里_我整理的一些常用Python库!让你快速记住这些库的用法!建议收藏...
  2. java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...
  3. 分布式事务不理解?一次给你讲清楚!
  4. PHP安装zip拓展,以及libzip安装问题
  5. JS 四则运算精度丢失解决方案
  6. java两个长度不同数组_两组数组,长度不一样,如果其中一个数组的值在另一个中不存在,则不符合要求.怎么算?...
  7. bmp转换tiff c++代码_如何用Java语言将图像转换为PDF?Spire.PDF for Java轻松搞定
  8. Ubuntu 18.04安装codeblocks 17-12
  9. 安装更新Lenovo Solution Center更新失败!具体问题看内容!要是等官方技术人员解决,估计要等上好一段时间!...
  10. css3中skew与rotateX(),rotateY()的用法
  11. 链表常见操作java实现一:链表初始化,求链表长度
  12. Linux的ftp设置
  13. EXCEL工作表保护密码忘记,撤销保护攻略
  14. 数据库实验报告1数据库定义实验
  15. 如何理解移动侦测录像与人体红外感应
  16. javascript——构造函数和原型对象
  17. 热烈祝贺方正璞华两款产品入选2021年度江苏省工业软件优秀产品和应用解决方案拟推广名单
  18. 官宣:两校合并,落户省会!
  19. 500 内部服务器错误 解决方法
  20. java连接高斯数据库,高斯数据库 (gaussDB) - 基于 JDBC 开发 (9)

热门文章

  1. 转速负反馈闭环调速系统
  2. 7-1 集合相似度——练习题集(2020/3/30)
  3. telnet、ssh服务实现远程访问(hcl)
  4. C/C++之取整函数
  5. JS动态为对象添加属性
  6. plsql oracle 无效月份,“ORA-01843: 无效的月份“问题
  7. 你怎么理解并使用静态方法和实例化方法的?
  8. 自醒-【德鲁克的经典五问】
  9. 国内android现状 文献综述,android文献综述.doc
  10. html给复制的英文文献换空格符