cassandra权威指南读书笔记--引言概要

数据库事务正确执行的四个基本要素
事务要有四个基本要素:ACID:原子性(Atomic)、一致性(Consistent)、隔离性(Isolated)、持久性(Durable)
原子性(Atomic):
整个事务中的如果有多个操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。执行失败则回滚。
一致性(Consistent):
如果事务并发多个,系统也必须如同串行事务一样操作。单机就保证多表级联操作等等,得保证两个表都同时修改。事务前后的操作得一致。事务执行完得和预期一致。
隔离性(Isolated):
并发的事务不能彼此依赖,各自独立运行。即如果两个事务同时改同一份数据,得串行。(加锁)
持久性(Durable):
在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。系统崩溃也不会丢失(记日志)

二阶段提交(Two-phaseCommit/2PC):
2PC是阻塞式的,只适合很快完成的操作可用。即客户端必须等待前一个事务完成,否则无法访问阻塞的资源。2PC是基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm),也被称为是一种协议(Protocol))
第一阶段发送事务内容,等待节点返回ACK,每个节点记undo和redo日志
第二阶段根据协调节点,如果部分失败or超时,需要undo
两阶段提交的缺陷:
单点故障(协调节点):协调节点挂了就没法运作。
性能问题:第一阶段就会锁资源,直到协调节点返回OK,才提交事务释放资源。
不一致:如果协调节点,因为一个节点超时,返回undo,那个节点大概率也接收不到(可能那个节点事务提交成功了),导致部分节点提交事务,部分没提交。也可能返回commit ack时,部分节点收到了,提交事务,释放资源,部分未提交。

3PC:
canCommit,preCommit,doCommit
相对于2PC,3PC主要解决的单点故障问题,并减少阻塞,因为一旦参与者无法及时收到来自协调者的信息之后,他会默认执行commit。而不会一直持有事务资源并处于阻塞状态。但是这种机制也会导致数据一致性问题,因为,由于网络原因,协调者发送的abort响应没有及时被参与者接收到,那么参与者在等待超时之后执行了commit操作。这样就和其他接到abort命令并执行回滚的参与者之间存在数据不一致的情况。
Google Chubby的作者Mike Burrows说过, there is only one consensus protocol, and that’s Paxos”
补偿机制:重试,事务失败之后核销事务,在放弃出错的事务并在之后核对。

database包含schema,schema对象,可以是表(table)、列(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key)等

sharding(分片)就是把数据拆分,把数据分到不同的服务器上,比如有类似hash算法,把不同数据分配到不同机器。一般针对比较独立的数据,即分到哪都没什么关系,即一般不会联表查询之类。

posted @ 2020-07-07 00:58  DevinDC  阅读(175)  评论(0编辑  收藏  举报