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. Linux 安装qt5-designer并集成到Pycharm

    在前面,有过介绍 Pycharm集成pyrcc4 =====>链接:  Pyqt 打包资源文件  这个是在Windows下集成,且pyqt在Windows下一个双击exe搞定. 在pyqt5之前 ...

  2. 利用easygui模块编写的华氏温度与摄氏温度转换的小程序

    -*- coding:utf-8 -*- #Author:'Lmc' #DATE: 2019/4/23/0023 下午 4:23:08 #FileName:tem_compare_gui.PY imp ...

  3. 计蒜客 买书 dfs

    题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...

  4. VMware workstation pro 15 安装Ubuntu(图文教程)

    今天分享一下虚拟机安装Ubuntu的过程,在开始安装之前,需要下载VMware workstation pro和Ubuntu镜像,两者我都用的最新版,由于VMware workstation pro ...

  5. CF741C.Arpa’s overnight party and Mehrdad’s silent entering [构造 二分图染色]

    CF741C - Arpa's overnight party and Mehrdad's silent entering 题意: 有 n 对情侣坐成一个圈,有两种食物Kooft and Zahre- ...

  6. java中的异常(一)

    java异常的概念 执行期的错误(javac xxx.java) 运行期的错误(java xxx) 这里讲的是运行期出现的错误 class TestEx { public static void ma ...

  7. Android中ListView的简单使用

    动态添加单行列表: 首先前提是你的布局文件里有一个ListView 单行列表的添加只需要一个list集合即可,使用ArrayAdapter数组适配器绑定更新就行了 首先声明一个ArrayAdapter ...

  8. CentOS 7.3/Linux .net core sdk 安装

    执行下列命令,安装.NET Core SDK(微软官方教程地址 https://www.microsoft.com/net/learn/get-started/linuxcentos) 点开链接,选择 ...

  9. 配置maven和maven本地仓库

    l配置maven: 下载maven 网站: http://maven.apache.org/download.cgi 下载解压,在配置maven 右键本地电脑   选择 属性  在选择高级环境变量在选 ...

  10. 记一次Dynamic Batching不生效的爬坑实例分析[Unity]

    最近在项目开发过程中,无意发现游戏场景的绘制占用了大量的Batches,几乎一个模型显示就占用了一个Batch,而Saved by batching数量几乎为0,即没有任何合批渲染优化.这显然跟预期相 ...