雷兽的数据库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 个( ...
随机推荐
- Maven使用--打包和运行
将项目进行编译.测试后,下一个重要步骤就是打包.简单执行命令mvn clean package进行打包.Maven会在打包前执行编译.测试等操作. 在打包后,执行安装任务install ...
- PLSQL_基础系列11_递归和层次查询CONNECT BY(案例)
2015-05-31 Created By BaoXinjian
- 03.product.js
/* item.jd.com Compressed by uglify Author:keelii Date: 2014-08-05 6:52:26 [PM] */ function insertSc ...
- 用 <a> 实现 <form> 表单的提交
<form action="{:U('Index/fwbhss')}" method="post" id="tform" name=& ...
- [ActionScript 3.0] AS3.0 生成xml方法之一
var type:Array = ["type0", "type1", "type2"]; var property:Array = [[& ...
- Java中的装箱拆箱
一) 装箱与拆箱 Java中有概念是一切皆对象,因为所有的类都默认继承自Object.但是,对于数据类型是个例外,如short,int,long,float,double, byte,char,bo ...
- poj 1094 Sorting It All Out(nyoj 349)
点击打开链接 Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24544 Accep ...
- (转)C# WinForm获取当前路径汇总
Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏本文来源 :http://www.cnblogs.com/greatverve/archive/2011/12/15/winform- ...
- jdk集合常用方法分析之HashSet和TreeSet
HashSet常用方法介绍 public boolean add(E e) public boolean isEmpty() void clear() public Iterator<E> ...
- 将 node.js 的数据保存到 mongo 数据库中
Mongo 数据库 安装 首先到 Mongo 的官方网站下载安装程序:http://www.mongodb.org/,我下载的文件名为:mongodb-win32-x86_64-2008plus-2. ...