Cassandra不会使用回滚和锁机制来实现关系型数据的ACID事务,相比较于提供原子性,隔离性和持久化,Cassandra提供最终(可调节的)一致性,让用户决定为每个事务提供强一致性或者最终一致性。

作为非关系型数据库,Cassandra不支持join或者外键,因此Cassandra不提供ACID层面的一致性。例如,当从账户A转账给账户B,整个账户总额不应该改变。Cassandra支持row-level的原子性和隔离性,为了提供高可用和更快的写入性能,牺牲了事务的隔离性和原子性。Cassandra写操作是持久化的。

原子性

在Cassandra中,写入操作时partition level的原子性,意味着同一分区的2行或者多行的写入或者更新被当做同一写入操作。删除操作同样是partition level。

例如,如果写一致性为QUORUM,relication factor为3,Cassandra会将写操作复制到集群中的所有的节点,然后等待2个节点的应答。如果某个节点写入失败了但是其他节点成功了,Cassandra会在失败的节点报告失败。然而,其他成功写入的节点不会自动进行回滚。

Cassandra使用客户端的时间戳来决定一列的最新更新。当请求数据的时候,最新的时间戳赢,因此如果多个客户端会话同时更新一行的相同列,最后更新的才会被读操作看到。

隔离性

Cassandra 写和删除操作是完全行level的隔离性。这意味着在单个节点上的一个分区,对客户端来说一次只能写入一行。这个操作范围是严格受限的,直到他完成。在一个batch操作中的所有更新,属于同一个给定的partition key有一样的限制。然而,如果batch操作中包含超过一个分区的更新,并不是隔离的。

持久化

Cassandra中的写操作是持久化的。一个节点上的所有写操作在收到应答标记写入成功之前都会写入到内存和磁盘的commit log中。如果在memtables flush到磁盘之前,忽然宕机或者节点失败,commit log 可以用来在节点恢复重启时找回丢失的写入操作。除了本地的持久化(数据立即写入到磁盘中),其他节点上存有副本也增强了持久化。

可以通过使用commitlog_sync选项来管理本地的持久化,满足对于一致性的需求。设置选项为periodic 或者batch

Cassandra事务与关系型数据库事务有何区别的更多相关文章

  1. redis事务与关系型数据库事务比较

    redis 是一个高性能的key-value 数据库.作为no sql 数据库redis 与传统关系型数据库相比有简单灵活.数据结构丰富.高速读写等优点. 本文主要针对redis 在事物方面的处理与传 ...

  2. 数据库事务隔离级ORACLE数据库事务隔离级别介绍

    本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...

  3. Spring的事务管理和数据库事务相关知识

    1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱.         比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱. ...

  4. Spring事务传播及数据库事务操作

    从Spring 事务配置说起 先看看Spring 事务的基础配置 <aop:aspectj-autoproxy proxy-target-class="true"/> ...

  5. 关系型数据库事务遵循ACID原则

    事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1.A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功 ...

  6. Redis(1.3)Redis的基本特性(事务、多数据库)

    [1]两大特性 (1)多数据库 1个redis实例 可以有16个数据库,默认下标为0~15,默认连接到的是 0 下标的数据库. (2)事务 [2]多数据库 [2.1]概念 1个redis实例 可以有1 ...

  7. 数据库事务(2)---ACID与并发问题

    事务 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数据库事务. 概念 一 ...

  8. 数据库事务特性ACID

    事务 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数据库事务. 概念 一 ...

  9. 开涛spring3(9.1) - Spring的事务 之 9.1 数据库事务概述

    9.1  数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...

随机推荐

  1. xiao_ren

  2. .net core 上传文件大小限制 webconfig

    <?xml version="1.0" encoding="utf-8"?><configuration> <location p ...

  3. C#代码总结01---如何清空页面上所有文本框的内容。(用于录入后的清空)

    /// <summary> /// 清空页面上所有TextBox的内容.用于录入后的清空 /// </summary> /// <param name="top ...

  4. vuex的一些学习

    刚开始学vuex看文档看的一脸懵逼,故而网上各种查找资料,视频去观看学习,虽然看了很多还是很蒙圈,最近看了一个讲vuex的视频还有一个 类似的简书文档从中学到了很多,慢慢理清了头绪,至此记录一下,共同 ...

  5. Java 将容器 Map中的内容保存到数组

    import java.util.Map; import java.util.HashMap; import java.util.Map.Entry; public class mapToArr { ...

  6. 2018面向对象程序设计(java)课程学习进度条

    周次 (阅读/编写)代码行数 发布博文量/评论他人博文数量 课余学习时间 学习收获的最大程序阅读或编程任务 1 30-50 1/0 5 九九乘法表 2 60-80 1/0 6 实验一,实验二 3 12 ...

  7. rest_framework之认证源码剖析

    如果我们写API有人能访问,有人不能访问,则需要些认证. 如何知道该用户是否已登入? 如果用户登入成功,则给用户一个随机字符串,去访问另一个页面. 以前写session的时候,都是把session写c ...

  8. Java-JSON 解析

    JSON  JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采 ...

  9. Objective-C 优秀文章分享

    1.  Objective-C Runtime 2.KVO + Block 3.Method Swizzling 和 AOP 实践

  10. Android双击Home键返回桌面

    转载自:http://blog.csdn.net/dl10210950/article/details/60866407 2中方式,都是监听返回键 一种 1 private long time; /* ...