雷兽的数据库CAP乱谈之(一)阐述
今天有人问我cap,找了https://my.oschina.net/lilw/blog/169776这片文字,
下面是cap那篇文字的解释:
所谓CAP理论,即:
Cosistency 数据的一致性
Availability 高可用性
Tolerance to newowrk Partitions 分区容忍性
一个数据存储系统不可能同时满足上述三个特性,只能同时满足其两个特性,也就是: CA,CP,AP。可以这么说,当前所有的数据存储解决方案,都可以归类的上述三种类型。
CA 满足数据的一致性和高可用性,但没有可扩展性,如传统的关系型数据,基本上满足是这个解决方案,如ORACLE , MYSQL 的单节点,满足数据的一致性和高可用性。
CP 满足数据的一致性和分区性,如Oracle RAC ,Sybase 集群。虽然Oracle RAC具备一点的扩展性,但当节点达到一定数目时,性能(也即可用性)就会下降很快,并且节点之间的网络开销很在在,需要实时同步各节点之间的数据。
AP 在性能和可扩展性方面表现不错,但在数据一致性方面会用牺牲,各节点的之间数据同步没有哪么快,但能保存数据的最终一致性。当前热炒的NOSQL大多类是典型的AP类型数据库。
以上是原文内容;
我却觉这解释有点不完全敢苟同,按照这篇文字第一条ca组合下的描述,这个高可用性我认为应该是鲁棒性,
我跟这个所谓数据库的鲁棒性,就是比如在同一个实例同一个库的数据库,不管你是单表还是多表join,想怎么读怎么写都不是问题,我认为说这是可用性,很是牵强,因为
cap百度百科的解释如下:
● 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
我这里说的cap既可能是sql下所谓的 可以叫 伪分布式集群的cap,当然还包括nosql集群的cap,
让后其实还讲到了在大的分布式意义下 某个小规模下的非分布式 也就是分片节点本身 数据100%冗余 全库冗余的情况下 也就是只有一个分片;
首先 在上面说的这种整个集群单一分片的情况下 分多种情况 比如包括 主从 主备 多主
主从就是线上备份 从默认不能写 但是主挂了不自动切换 原始的各种数据库同步技术就是这种了 你是否利用从库来做读的加速 是你自己处理
主备 是主从加上了自动切换
多主 差不多相当于是把主备的方式反过来 同时也让备同步到主 双向考虑
这里还有个问题就是 同步复制还是异步复制
异步复制以及同步复制发送延迟过大造成了本质上的异步的瞬间问题点的时候
简单的可以认为是分布式数据存储时候的最简单最基本的静态状态下,这是我自己的话,也就是指整个数据库集群 就只有一个分片 每个节点100%数据冗余的情况,暂且把这种情况叫做静态的分布式数据库集群模式
在这种静态中的cap (以下字母我就不分了 反正 内容就是那三个:数据一致性,高可用,分区容忍性)
数据一致性 应该是同内容的镜像分片之间的数据一致与否的问题 就是异步复制 和 同步复制延时过大 这个问题在很多事务级同步的sql方案里不存在了 但是并非100%不会出现
高可用 这个分布式里的数据还是容器都一样 跟上面那个一样同一份数据或者同一个功能节点是否有冗余 是否高可用自动切换 这里为了鲁棒性 其实应该默认和数据一致性同在 只有主备节点数据实时同步 并不会有数据一致性问题 才真正有高可用的意义,其实目前很多高可用方案 其实并非如此 具体技术 就要自己去了解
然后动态来看 就是数据不在一个物理分片上了 就是认为 基本做不了高性能的join的这种情况 或者说 模式
数据一致性 因为不光是全数据镜像 还有同一个事务上下文在不同实例时候 因为普通事务无法维系 而产生的问题 通常 这个分布式数据系统都做不到 或者不能良好做到 比如mysql的 xa协议分布式事务 sqlserver的 基于dtc 分布式事务 这些性能 有限 随扩展后 性能下降更加明显 而在nosql里 基本就压根不支持跨节点事务 因为支持了这个 节点扩展 问题就非常严重了 也就是数据一致性降低了可分片的空间和意义
分区容忍性 其实是分布式的基础吧 这里我要说的是 oltp olap 问题 分区容忍性其实几乎100%的跟olap不合 至少挺难的 oltp简单一些 归结一点就是 单数据实例上各种操作的鲁棒性 在分区情况下 接近完全丧失
雷兽的数据库CAP乱谈之(一)阐述的更多相关文章
- 微软ASP.NET技术“乱谈”
微软ASP.NET技术“乱谈” 2014新年了,顺手写的一点文字,主要谈谈我对当前微软ASP.NET技术的看法,比较随意,大伙儿随便看看吧. 1 当前微软Web平台技术全貌 从2002年发布.NET ...
- C++矢量图形库系列(1)——矢量图形库乱谈(转)
转自:http://blog.sina.com.cn/s/blog_4265e1760100lg03.html 本系列篇章的主要内容是讲解矢量图形库的编译.开发和使用.并不对他们周边的内容做过多的描述 ...
- 优测优社区干货精选|老司机乱谈编辑器之神——vim
文 / 腾讯 吴双 前言 优测小优 有话说: 腾讯优测只有应用测试大神?不不不,我们还有各种研发大牛! *** vim 是一种信仰,我自从2004年有了这个信仰,已经12个年头了.本文介绍了学习vim ...
- [转]vnpy乱乱谈 02架构
vnpy乱乱谈 02架构 转自:http://101.132.65.227/?p=51 听到架构这个词先不要害怕. 其实这部分内容还是挺简单的. 一般而言, 一个交易系统我们可以简单的分成输入, (系 ...
- Nosql数据库的四大分类及分布式数据库CAP原理
1. Nosql数据库的四大分类 2. 分布式数据库CAP原理 2.1 关系型数据库事务遵循的ACID规则 首先了解传统关系型数据库事务遵循的ACID规则: 原子性(Atomicity):事务里的所有 ...
- Redis_NoSql分布式数据库CAP原理
前文简单介绍了NoSql数据库的四大分类以及常用的数据库技术,本文简单介绍分布式数据库CAP原理. 一.传统的CAID是什么 1. A(Atomicity)原子性:事务里的所有操作要么全部做完,要么都 ...
- JIT-动态编译与AOT-静态编译:java/ java/ JavaScript/Dart乱谈
C 和 C++ 之类的编译语言性能远超Java,但是生成的代码只能在有限的几种系统上执行,这就有了Java的存在基础(JVM-跨平台) 早期 Java 运行时所提供的性能级别远低于 C 和 C++ 之 ...
- 从数据库存储,文件结构谈到B树,散列
昨天俱乐部内部办了一个讲座,关于常规数据库系统实现,听了之后有点混乱,于是花了很多时间特地查了一些资料,基本上自己感觉自己是明白了.特地写下来. 文章开头说明三点, 第一点,本文针对常规数据库,是为了 ...
- 小小换行符乱谈(文本文件vs二进制文件)
使用 C 语言的 fopen 打开文件时,可以指定的 mode 有 12 个,其中 6 个包含 "b" 使用 C++ 的 fstream 打开文件时,可用的模式组合有 24 个( ...
随机推荐
- Js读写cookie实例
统计访问次数 <html> <head> <meta http-equiv="Content-Type" content="text/htm ...
- myBatis获取批量插入数据的主键id
在myBatis中获取刚刚插入的数据的主键id是比较容易的 , 一般来说下面的一句话就可以搞定了 , 网上也有很多相关资料去查. @Options(useGeneratedKeys = true, k ...
- GC之三--GC 触发Full GC执行的情况及应对策略
1.System.gc()方法的调用 此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full GC的频率,也即增加了间歇性停顿的次数. ...
- js上移、下移、置顶、置底功能实现
实现页面上列表内容上移.下移.置顶.置底 功能,主要实现思路是节点操作,比如说:上移,直接把点击项移动到前一个节点,以此类推,当然实际代码实现还要加些判断,如当前点击操作项是否已经是置底或置底了,如果 ...
- XtraReport 实例化 打印
// Create a report instance, assigned to a Print Tool. ReportPrintTool pt = new ReportPrintTool( ...
- 格式化日期的js(正则魅力)
/** * 时间对象的格式化; */ Date.prototype.format = function(format) { // ◆ 使用prototype定义原型方法 /* * eg:forma ...
- 更换ubuntu apt-get 源
为了优化ubuntu软件安装/更新速度,我测试了国内几家apt源的速度,发现北京交大的apt源速度相对最快,然后可以通过以下步骤更新ubuntu源 1) 备份默认的apt源 $ cd /etc/apt ...
- linux内核hash list
源码: #ifndef _LINUX_HLIST_H #define _LINUX_HLIST_H /* * Double linked lists with a single pointer lis ...
- C++学习40 抛出自己的异常
throw 是C++中的关键字,用来抛出异常.如果不使用 throw 关键字,try 就什么也捕获不到:上节提到的 at() 函数在内部也使用了 throw 关键字来抛出异常. throw 既可以用在 ...
- [ActionScript 3.0] AS3.0 水面波纹效果
import flash.geom.Point; import flash.display.BitmapData; import flash.filters.DisplacementMapFilter ...