雷兽的数据库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 个( ...
随机推荐
- HashMap 实现详解
HashMap是哈希表对Map非线程安全版本的实现,它允许key为null,也允许value为null.所谓哈希表就是通过一个哈希函数计算出一个key的哈希值,然后使用该哈希值定位对应的value所在 ...
- [rm] Linux 防止"rm -rf /" 误删除
一.缘由: 最近看到这则新闻,很是悲伤,因为我最近也在用ansible:然而这一错误源自Ansible上糟糕的代码设计,这款Linux实用工具被用于在多台不同服务器上自动执行脚本. 开发者解释到,实际 ...
- Mongodb(3)插入文档,更新文档,删除文档
insert() 方法 要插入数据到 MongoDB 集合,需要使用 MongoDB 的 insert() 或 save() 方法. 插入文档:db.COLLECTION_NAME.insert(d ...
- vim 学习日志(2):set的使用方法
一,打开或关闭行号(number) 如果希望每次进入vi 会话时都显示行号,那么在主目录中的.exrc 文件中添加 set number 行. 在命令模式下,使用如下命令 :set all ...
- jQuery-ajax: 取消关注|关注
ylbtech-jQuery-ajax: 取消关注|关注 1.A,jQuery-效果图返回顶部 1.B,jQuery-Source Code(源代码)返回顶部 <script src=&qu ...
- ylbtech-Unitity-cs:传递的字符串中数字字符的数目
ylbtech-Unitity-cs:传递的字符串中数字字符的数目 1.A,效果图返回顶部 1.B,源代码返回顶部 1.B.1, using System; namespace Functions ...
- 在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程
在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程 by shuijingwan · 2016/01/13 1.SDK安装 github ...
- git查看历史命令
1 git show git show 分支名/HEAD/hash值 2 git log参数 --oneline 单行信息--decorate 输出commit引用信息--graph 图形化输出--a ...
- struts (二)
1.运行流程 client --->tomcat ---> webapp -->web.xml --->filter -->struts.xml ---->na ...
- Java SE 第十六讲----面向对象特征之多态
1.多态:polymorphism:我们说的子类就是父类(玫瑰是花,男子是人),因此多态的意思就是:父类型的引用可以指向子类的对象 public class PolyTest { public sta ...