Cassandra1.2文档学习(14)—— 事务和并发控制
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_transactions_c.html#concept_ds_j1p_m5x_zj
Cassandra不提供完整的符合ACID特性的事务,ACID事务是关系型数据库系统的标准事务行为:
•原子性
在事务中每一个步要么成功或者回滚整个事务。
•一致性
一个事务不能使数据库处于不一致的状态。
•隔离性
事务不能相互干扰。
•持久性
事务完成以后,更改便持久地保存在数据库之中。
作为一个非关系型数据库,Cassandra 不支持连接和外键,因此从ACID的角度来说不提供一致性。例如,让把钱从A账户移到B账户总账目中不改变。 Cassandra支持行一级的原子性和隔离性,但与之交换的是高度的可用性和快速的读写性能。
Cassandra写入具有持久性。
一、原子性
在Cassandra中,一个写入在行一级是原子性的,插入或更新一个行的各个列认为是一个写入操作。Cassandra不支持多行插入时要么有要么全无这样的事务。同样,但写入在一个副本节点上成功,但是在其他节点失败时,回顾是不会发生的。Cassandra中可以通过一个发送操作的错误报告通知客户端,但事实上一个副本节点上仍然存留着写入的数据。
例如,如果使用写的一致性为QUORUM、副本因子为3,Cassandra会复制写入到集群中的各个节点并且等待两个节点的返回。如果写入在其中一个节点失败但是在其他节点成功。Cassandra会报告一个错误去在那个节点上重新执行写入然而,另一个节点写入成功是不会自动回滚的。
Cassandra使用时间戳去决定哪一个是最新的更新。时间戳室友客户端程序提供的。当请求数据时最新的时间戳总是会获得胜利,因此如果多个客户端会话同时地更新同一行相同的列,最新的更新是那个最终坚持的。
二、可调的一致性
当同时地更新多个行或者多个表时没有锁或者事务依赖。Cassandra支持可以调整的可用性和一致性,并且能提供给你分区耐受性。从CAP 的来说,Cassandra可以给你很强的一致性当数据连续的分布在在一个分布式数据集群的各个节点上。
用户可以选择一个运行准则——多少节点必须接收到DML命令或者对一个SELECT查询做出回应。
三、隔离性
在Cassandra 1.1之前,可能会看到部分的更新当一个用户更新行但是另一个用户读取相同行。例如,当一个用户写入一个行,那个行包括2000列,另一个用户可能读取相同行并且见到一些列,但不能看到所有列当写入还在执行的时候。
完整的行级别的隔离性现在准备就绪了因此写入到一行是隔离的当客户端执行写入时,并且不可被其他用户访问直到写入成功。
从事务ACID的角度看,现在的增强给了Cassandra AID事务的支持。在存储引擎中一个写入是行一级隔离的。
四、持久性
Cassandra写入具有持久性。在返回成功之前,副本节点上所有的会被记录在内存中和磁盘上的commit log文件中。如果在内存中的表刷新到磁盘之前,系统崩溃了或者服务器宕机了,commit log文件会在系统重启后重新执行以恢复任何丢失的数据。除了本地的持久性(数据立马被写入到磁盘)将数据复制其他节点上也增强了持久性。
Cassandra1.2文档学习(14)—— 事务和并发控制的更多相关文章
- Cassandra1.2文档学习解读计划——为自己鼓劲
最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...
- Cassandra1.2文档学习(16)—— 模式的变化
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_schema ...
- Cassandra1.2文档学习(15)—— 配置数据一致性
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...
- Cassandra1.2文档学习(1)——Cassandra基本说明
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...
- Cassandra1.2文档学习(19)—— CQL索引
参考文档:http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/ddl_primary_index_c.ht ...
- Cassandra1.2文档学习(17)—— CQL数据模型(上)
参考文档:http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/ddl_anatomy_table_c.ht ...
- Cassandra1.2文档学习(13)—— 数据读取
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
- Cassandra1.2文档学习(12)—— hint机制
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
- Cassandra1.2文档学习(11)—— 删除数据
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
随机推荐
- 线程控制之线程和fork
当线程调用fork时,就为子进程创建了整个进程地址空间的副本.回忆http://www.cnblogs.com/nufangrensheng/p/3509492.html中讨论的写时复制,子进程与父进 ...
- 目录操作函数opendir、readdir和closedir
首先,明确一个类型DIR的含义: #include <dirent.h> DIR A type representing a directory stream. DIR是在目录项格式 ...
- 如何在 PHP 中处理 Protocol Buffers 数据
Protocol Buffers是谷歌定义的一种跨语言.跨平台.可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据量小,解析效率高 ...
- JMeter 学习笔记从不懂慢慢提升(01)
开源已经成为一个趋势,虽然说做测试是一个低端的行业,但是我们也应该在这个低端的行业慢慢提升自己,让自己到达理想的高度. 以前说如果你会使用loadrunner可能别人就会觉得你有一定的水平那么就会拿高 ...
- selenium python 环境搭建
说真的关于这个网上有太多的文章了,不想在这上面浪费过多的精神,简单说一下: 1.下载python(我的2.7) 2.下载python的基础工具包(setuptools) 3.下载python的安装包管 ...
- javascript 编写的贪吃蛇
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在SSIS 的 64 位版本中不支持 Excel 连接管理器
Microsoft sql server 2008 R2——> SQL SERVER Business Intelligence Development Studio 使用EXCEL数据源或目标 ...
- AES 加解密
// // NSData+AES.h // Smile // // Created by 蒲晓涛 on 12-11-24. // Copyright (c) 2012年 BOX. All rights ...
- python(3)-函数动态参数
先来看一段代码 def show(*arg): print(arg, type(arg)) if __name__ == "__main__": show(1) show(1,2, ...
- 控制器view的延迟加载