参考文档: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)—— 事务和并发控制的更多相关文章

  1. Cassandra1.2文档学习解读计划——为自己鼓劲

    最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...

  2. Cassandra1.2文档学习(16)—— 模式的变化

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_schema ...

  3. Cassandra1.2文档学习(15)—— 配置数据一致性

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...

  4. Cassandra1.2文档学习(1)——Cassandra基本说明

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  5. Cassandra1.2文档学习(19)—— CQL索引

    参考文档:http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/ddl_primary_index_c.ht ...

  6. Cassandra1.2文档学习(17)—— CQL数据模型(上)

    参考文档:http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/ddl_anatomy_table_c.ht ...

  7. Cassandra1.2文档学习(13)—— 数据读取

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  8. Cassandra1.2文档学习(12)—— hint机制

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  9. Cassandra1.2文档学习(11)—— 删除数据

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

随机推荐

  1. 关于使用NotificationComat导致android2.3及以下版本无法显示自定义布局的解决方法.

    大伙都知道 android-support-v4为我们提供了很多兼容的解决方案, 其中就有关于通知栏的. NotificationCompat, 顺利成章操刀显示通知. eg: Intent inte ...

  2. 真机下, 如何在File Explorer里看data下的数据?

    首先手机得Root , 你如果想单个单个的看, root explorer可以设置Permission Other下的两个权限点上就ok了. 如果想看到所有的, 即子目录也可以看到, 只需要adb r ...

  3. Maven学习小结(七 生命周期[转])

    Maven2的阶段(生命周期)说明:Maven2拥有三套独立的生命周期,Maven的命令也是基于这些生命周期来说的.1.clean:清理先前构建的构件,又分为下面三个下阶段: a.pre-clean ...

  4. eclipse中自动生成javadoc文档

    使用eclipse生成文档(javadoc)主要有三种方法:  1,在项目列表中按右键,选择Export(导出),然后在Export(导出)对话框中选择java下的javadoc,提交到下一步.  在 ...

  5. IOC容器初始化过程

    原文链接请参见:http://blog.csdn.net/u010723709/article/details/47046211

  6. 屏蔽cBox广告的方法 无需安装软件

    在hosts文件中加入两句代码: 127.0.0.1 games.cntv.cn 127.0.0.1 d.cntv.cn

  7. Window 中常见的dos命令

    在哪里操作dos命令:    win7---->开始---->所有程序---->附件---->命令提示符                              win7-- ...

  8. js获取网页高度(详细整理)

    网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: document.body.offset ...

  9. ASP常用函数

    取得IP地址 '******************************************************************* Function Userip() Dim Ge ...

  10. C# 4 dynamic 动态对象 动态类型转换

    public class User { //使用省缺参数,一般不需要再为多态做各种静态重载了 public User( string name = "anonym", string ...