切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
NoSQL
CAP理论和ACID模型
CAP理论和ACID模型
2020-05-28
NoSQL
前端之家
前端之家
收集整理的这篇文章主要介绍了
CAP理论和ACID模型
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
转自:
http://www.jdon.com/37625
分布式领域CAP理论,
Consistency(一致性),数据一致更新,所有数据变动都是同步的
Availability(可用性),好的响应
性能
Partition tolerance(分区容错性) 可靠性
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
关系
数据库
的ACID模型拥有 高一致性 + 可用性 很难进行分区:
Atomicity原子性:一个
事务
中所有操作都必须全部完成,要么全部不完成。
Consistency一致性. 在
事务
开始或结束时,
数据库
应该在一致状态。
Isolation隔离层.
事务
将假定只有它自己在操作
数据库
,彼此不知晓。
Durability. 一旦
事务
完成,就不能返回。
跨
数据库
事务
:2PC (two-phase commit), 2PC is the anti-scalability pattern (Pat Helland) 是反可伸缩模式的,JavaEE中的JTA事务可以
支持
2PC。因为2PC是反模式,尽量不要使用2PC,使用BASE来回避。
BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性:
Basically Available基本可用。
支持
分区失败(e.g. sharding碎片划分
数据库
)
Soft state软状态 状态可以有一段时间不同步,异步。
Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时高一致。
BASE思想的主要实现有
1.按
功能
划分
数据库
2.sharding碎片
BASE思想主要强调基本的可用性,如果你需要High 可用性,也就是纯粹的高
性能
,那么就要以一致性或容错性为牺牲,BASE思想的方案在
性能
上还是有潜力可挖的。
现在
NoSQL
运动丰富了拓展了BASE思想,可按照具体情况定制特别方案,比如忽视一致性,获得高可用性等等,NO
sql
应该有下面两个流派:
1. Key-Value存储,如Amaze Dynamo等,可根据CAP三原则灵活选择不同倾向的
数据库
产品。
2. 领域模型 + 分布式
缓存
+ 存储 (
Qi4j和
NoSQL
运动),可根据CAP三原则结合自己项目定制灵活的分布式方案,难度高。
这两者共同点:都是关系
数据库
sql
以外的可选方案,逻辑随着数据分布,任何模型都可以自己持久化,将数据处理和数据存储分离,将读和写分离,存储可以是
异步
或同步,取决于对一致性的要求程度。
不同点:NO
sql
之类的Key-Value存储产品是和关系
数据库
头碰头的产品
Box
,可以适合非Java如
PHP
RUBY等领域,是一种可以拿来就用的产品,而领域模型 + 分布式
缓存
+ 存储是一种复杂的架构
解决方
案,不是产品,但这种方式更灵活,更应该是架构师必须掌握的。
上一篇:Solr 4.0: Realtime GET
下一篇:NOSQL们背后的共有原则
猜你在找的NoSQL相关文章
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
一、引言 学习redis 也有一段时间了,该接触的也差不多了。后来有一天,以前的同事问我,如...
作者:前端之家 时间:2020-11-07
MongoDb进阶实践之二 如何在Windows上安装和配置MongoDB
一、引言 上一篇文章,我介绍了如何在Linux系统上安装和配置MongoDB,其实都不是很难,不需...
作者:前端之家 时间:2020-11-07
Redis进阶实践之十七 Redis协议的规范
一、介绍 Redis客户端使用RESP(Redis的序列化协议)协议与Redis的服务器端进行通信。 虽然...
作者:前端之家 时间:2020-11-07
Redis进阶实践之十九 Redis如何使用lua脚本
一、引言 redis学了一段时间了,基本的东西都没问题了。从今天开始讲写一些redis和lua脚本...
作者:前端之家 时间:2020-11-07
Redis进阶实践之十五 Redis-cli命令行工具使用详解第二部分(结束)
一、介绍 今天继续redis-cli使用的介绍,上一篇文章写了一部分,写到第9个小节,今天就来完...
作者:前端之家 时间:2020-11-07
Redis进阶实践之十四 Redis-cli命令行工具使用详解第一部分
一、介绍 redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西。现在redis的...
作者:前端之家 时间:2020-11-07
MongoDb进阶实践之七 MongoDB的索引入门
一、引言 好久没有写东西了,MongoDB系列的文章也丢下好长时间了。今天终于有时间了,就写...
作者:前端之家 时间:2020-11-07
Memcached在Linux环境下的使用详解
一、引言 写有关NoSQL数据库有关的文章已经有一段时间了,可以高兴的说,Redis暂时就算写完...
作者:前端之家 时间:2020-11-07
Redis进阶实践之二十 Redis的配置文件使用详解
一、引言 写完上一篇有关redis使用lua脚本的文章,就有意结束Redis这个系列的文章了,当然...
作者:前端之家 时间:2020-11-07
Redis进阶实践之十二 Redis的Cluster集群动态扩容
一、引言 上一篇文章我们一步一步的教大家搭建了Redis的Cluster集群环境,形成了3个主节点...
作者:前端之家 时间:2020-11-07
编程分类
MySQL
MsSQL
Oracle
Sqlite
Postgre SQL
Mariadb
MongoDB
NoSQL
HBase
JDBC
最新文章
• Redis进阶实践之十八 使用
• MongoDb进阶实践之二 如何
• Redis进阶实践之十七 Redi
• Redis进阶实践之十九 Red
• Redis进阶实践之十五 Redi
• MongoDb进阶实践之六 Mong
• Redis进阶实践之十四 Redi
• MongoDb进阶实践之七 Mong
• Memcached在Linux环境下的
• Redis进阶实践之二十 Redi
热门标签
更多 ►
undo日志
persistent-c
mysql-error-
postal-code
sql-match-al
mysql-5.6
mysql-8.0
database-tri
安装路径
系统错误
data_dir
丢失文件
主从同步
sql_mode
数据库目录
匿名用户
character_se
ID归零
数据库位置
查询表
重复字段
查询字段
截断日志
SUSPECT
7391
Remote Serve
Linked Serve
玄学问题
登录不上
开启远程访问