Cassandra事务与关系型数据库事务有何区别
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事务与关系型数据库事务有何区别的更多相关文章
- redis事务与关系型数据库事务比较
redis 是一个高性能的key-value 数据库.作为no sql 数据库redis 与传统关系型数据库相比有简单灵活.数据结构丰富.高速读写等优点. 本文主要针对redis 在事物方面的处理与传 ...
- 数据库事务隔离级ORACLE数据库事务隔离级别介绍
本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...
- Spring的事务管理和数据库事务相关知识
1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱. ...
- Spring事务传播及数据库事务操作
从Spring 事务配置说起 先看看Spring 事务的基础配置 <aop:aspectj-autoproxy proxy-target-class="true"/> ...
- 关系型数据库事务遵循ACID原则
事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1.A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功 ...
- Redis(1.3)Redis的基本特性(事务、多数据库)
[1]两大特性 (1)多数据库 1个redis实例 可以有16个数据库,默认下标为0~15,默认连接到的是 0 下标的数据库. (2)事务 [2]多数据库 [2.1]概念 1个redis实例 可以有1 ...
- 数据库事务(2)---ACID与并发问题
事务 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数据库事务. 概念 一 ...
- 数据库事务特性ACID
事务 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数据库事务. 概念 一 ...
- 开涛spring3(9.1) - Spring的事务 之 9.1 数据库事务概述
9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...
随机推荐
- Django----博客文章数据返回
步骤1:新建视图函数 from django.shortcuts import render from django.http import HttpResponse; from blog.model ...
- Android进阶:三、这一次,我们用最详细的方式解析Android消息机制的源码
决定再写一次有关Handler的源码 Handler源码解析 一.创建Handler对象 使用handler最简单的方式:直接new一个Handler的对象 Handler handler = new ...
- C - Thief in a Shop - dp完全背包-FFT生成函数
C - Thief in a Shop 思路 :严格的控制好k的这个数量,这就是个裸完全背包问题.(复杂度最极端会到1e9) 他们随意原来随意组合的方案,与他们都减去 最小的 一个 a[ i ] 组合 ...
- 用canal同步binlog到kafka,spark streaming消费kafka topic乱码问题
canal 1.1.1版本之后, 默认支持将canal server接收到的binlog数据直接投递到MQ, 目前默认支持的MQ系统有kafka和RocketMQ. 在投递的时候我们使用的是非压平的消 ...
- Java中的异步通知
在我们的日常开发中,经常会遇到这样的问题--"我让你做一件事情,但是你做得很慢,并不能够立马返回给我结果,害我一直在那儿等着你给我返回结果,什么都做不了". 程序是自上而下顺序执行 ...
- Android Training
Building Apps with Content Sharing Simple Data --> Intent && ActionProvider 介绍如何让应用程序共享简单 ...
- 接口测试——postman & jmeter
新名词: 自动化测试:写代码帮你测试 接口:是一个抽象的概念,一种交互关系. 抓包:拦截请求. 接口测试:就是功能测试,比后者还简单. 需要有测试文档,包括项目.模块.URL.请求方式.参数.参数说明 ...
- python爬取房天下数据Demo
import requests from bs4 import BeautifulSoup res = requests.get('http://sh.esf.fang.com/chushou/3_3 ...
- javascript中的函数节流和函数去抖
带着问题去尝试 首先我们要知道为什么要用到函数节流和函数去抖?我们带着以下的疑问来进行分析! 1.比如搜索框,你会用到什么事件(change.blur.keyup等)?去做什么效果?2.再比如scro ...
- Java_集合
定义: 是一种工具,就像是容器,能存储任意数量的具有共同属性的对象. 与数组比较优点: (1)数组定义后长度不可变,集合长度可变: (2)数组只能通过下标访问,且下标类型只能是数字型,而有的集合(ma ...