事务管理

Hive ACID和事务表支持详解

半腔热情 提交于 2019-11-28 05:05:40
一、ACID介绍 ACID就是常见数据库事务的四大特性:Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。 在Hive 0.13之前,Hive支持 分区级别 上原子性、一致性、持久性,隔离性可以通过hive提供的锁机制来实现(通过zookeeper锁或者内存锁来 锁住一个分区的数据 )。 从Hive 0.13开始,Hive可以支持行级别上面的ACID语义了 。因此我们可以在有其他程序读取一个分区数据时往这个分区插入新的数据。 二、使用限制 不支持 BEGIN、COMMIT、ROLLBACK 等语句,所有的语句都是自动提交 仅支持ORC格式 事务的支持默认是关闭的,需要配置相关参数打开 表需要配置分桶,外部表不能设置成事务表,因为外部表的文件存储格式不在hive的管理之中。(因为Hive事务的实现主要依赖于表分桶的存储格式,如果表没分桶,那么表底下的文件就会很散乱,hive的事务机制无法有效的读取) 非 ACID 的会话不能读写ACID表,也就是说,需要在会话中手动set参数开启hive事务管理支持后才可以操作ACID表 目前仅支持快照隔离级别,不支持脏读、读已提交、可重复读、串行等隔离级别 现有的zk和内存锁和事务不兼容 使用oracle作为metastore数据库,以及设置了"datanucleus

orm的锁和事务

。_饼干妹妹 提交于 2019-11-28 04:48:57
一.锁 mysql中的加锁,不会防止其他用户的查询,会防止其他用户的增删改操作。 entries = Entry.objects.select_for_update().filter(author=request.user) #所有匹配的行将被锁定,直到事务结束 select_for_update(nowait=False, skip_locked=False) #注意必须用在事务里面 目前,postgresql,oracle和mysql数据库后端支持select_for_update()。 但是,MySQL不支持nowait和skip_locked参数。 二.事务 1.全局开启 当有请求过来时,Django会在调用视图方法前开启一个事务。如果请求正确处理并正确返回了结果,Django就会提交该事务。否则,Django会回滚该事务。 这个功能使用起来非常简单,你只需要将它的配置项 ATOMIC_REQUESTS 设置为True。 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mxshop', 'HOST': '127.0.0.1', 'PORT': '3306', 'USER': 'root', 'PASSWORD': '123', 'OPTIONS': { "init

小菜鸟之Oracle数据库之事务

断了今生、忘了曾经 提交于 2019-11-28 04:17:09
Oracle数据库之事务 1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行。 如:网上转帐就是典型的要用事务来处理,用以保证数据的一致性。 2. 事务特性 SQL92标准定义了数据库事务的四个特点: · 原子性(Atomicity):一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做。 · 一致性(Consistency):事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的。 · 隔离性(Isolation):是指数据库允许多个并发事务同时对其中的数据进行读写和修改的能力,隔离性可以防止事务的并发执行时,由于他们的操作命令交叉执行而导致的数据不一致状态。 · 持久性 (Durability) : 是指当事务结束后,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。 一组SQL语句操作要成为事务,数据库管理系统必须保证这组操作的原子性(Atomicity)、一致性(consistency)、隔离性(Isolation)和持久性(Durability),这就是ACID特性。 3. 数据异常 因为Oracle中支持多个事务并发执行,所以会出现下面的数据异常。 3

Zookeeper高级

流过昼夜 提交于 2019-11-28 04:15:26
1.1. 一致性协议概述 前面已经讨论过,在分布式环境下,有很多不确定性因素,故障随时都回发生,也讲了 CAP 理论, BASE 理论 我们希望达到,在分布式环境下能搭建一个高可用的,且数据高一致性的服务,目标是这样,但 CAP 理论告诉我们要达到这样的理想环境是不可能的。这三者最多完全满足 2 个。 在这个前提下, P (分区容错性)是必然要满足的,因为毕竟是分布式,不能把所有的应用全放到一个服务器里面,这样服务器是吃不消的,而且也存在单点故障问题。 所以,只能从一致性和可用性中找平衡。 怎么个平衡法?在这种环境下出现了 BASE 理论: 即使无法做到强一致性,但分布式系统可以根据自己的业务特点,采用适当的方式来使系统达到最终的一致性; BASE 由 Basically Avaliable 基本可用、 Soft state 软状态、 Eventually consistent 最终一致性组成,一句话概括就是:平时系统要求是基本可用,除开成功失败,运行有可容忍的延迟状态,但是,无论如何经过一段时间的延迟后系统最终必须达成数据是一致的。 其实可能发现不管是 CAP 理论,还是 BASE 理论,他们都是理论,这些理论是需要算法来实现的,今天讲的 2PC 、 3PC 、 Paxos 算法, ZAB 算法就是干这事情。 所以今天要讲的这些的前提一定是分布式,解决的问题全部都是在分布式环境下

mysql小白→高手

淺唱寂寞╮ 提交于 2019-11-28 03:32:40
mysql数据库 官方网站:https://dev.mysql.com; MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 什么是事务 事务:数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作; 事务是一组不可再分割的操作集合(工作逻辑单元); 典型事务场景(转账): update user_account set balance = balance - 1000 where userID = 3; update user_account set balance = balance +1000 where userID = 1; mysql中如何开启事务: begin / start transaction -- 手工 commit / rollback -- 事务提交或回滚 set session autocommit = on/off; -- 设定事务是否自动开启 JDBC 编程事务开启: connection.setAutoCommit(boolean); 特性: 原子性(Atomicity) 最小的工作单元,整个工作单元要么一起提交成功,要么全部失败回滚; 一致性(Consistency)

Linq to Sql:三种事务处理方式

会有一股神秘感。 提交于 2019-11-28 03:19:03
Linq to Sql : 三种事务处理方式 Linq to SQL支持三种事务处理模型:显式本地事务、显式可分发事务、隐式事务。(from MSDN: 事务 (LINQ to SQL) )。MSDN中描述得相对比较粗狂,下面就结合实例来对此进行阐述。 0. 测试环境 OS Windows Server 2008 Enterprise + sp1 IDE Visual Studio 2008, .net framework 3.5 + SP1 DB SQL Server 2000 + sp4 SQL Server 2008 Enterprise Edition 1. 隐式事务 当调用SubmitChanges 时,L2S会检查当前环境是否开启了事务(下面两节中创建的事务),如果没有开始事务,则 L2S启动本地事务(IDbTransaction),并使用此事务执行所生成的 SQL 命令。 使用Reflector查看DataContext.SubmitChanges的源代码(见本文最后的附录),可以看到,如果开启了一个事务,并将其传给DataContext.Transaction,则在执行SubmitChanges时就不会再重新开启一个新的事务了。 例如,下面的代码会创建应隐式事务: 1: public static void TestTranIn2000() 2: { 3:

面试题总结:可能是全网最好的MySQL重要知识点

为君一笑 提交于 2019-11-28 03:17:20
标题有点标题党的意思,但希望你在看了文章之后不会有这个想法——这篇文章是作者对之前总结的 MySQL 知识点做了完善后的产物,可以用来回顾MySQL基础知识以及 备战MySQL常见面试问题 。 什么是MySQL? MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的。MySQL是开放源代码的,因此任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQL的默认端口号是 3306 。 事务相关 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。 事物的四大特性(ACID)介绍一下? 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔离性:

MySQL(面试题)

爷,独闯天下 提交于 2019-11-28 03:13:23
1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据. 那么可以看出他们有以下的不同: hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询. 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围. hash索引不支持使用索引进行排序,原理同上. hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测. AAAA 和 AAAAB 的索引没有相关性. hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件

Spring使用注解进行事务管理

耗尽温柔 提交于 2019-11-28 00:56:57
一、在spring配置文件中加入命名空间 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> 二、spring配置文件 <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 数据源

分布式协调服务zookeeper

时间秒杀一切 提交于 2019-11-27 22:34:13
ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、master选举、分布式锁和分布式队列等。 ZooKeeper是Google的Chubby一个开源的实现,由雅虎创建,是Hadoop和Hbase的重要组件。 ZooKeeper没有直接采用paxos算法,而是采用了一种被称为ZAB(Zookeeper Atomic Broadcast)的一致性协议 ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 ZooKeeper可以保证如下分布式一致性特性 顺序一致性:从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到Zookeeper中; 原子性:所有事务的请求结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么在整个集群中所有机器上都成功应用了某一个事务,要么都没有应用,没有中间状态; 单一视图:无论客户端连接的是哪个Zookeeper服务器,其看到的服务端数据模型都是一致的。 可靠性:一旦服务端成功应用了一个事务,并完成对客户端的响应