事务管理

PG数据库事务隔离级别

我与影子孤独终老i 提交于 2019-11-30 19:16:04
Postgres数据库事务隔离级别介绍 0. What is Database Transaction? 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的一个逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。 —— [百度百科] A –Atomicity 事务必须是原子工作单元; 要么全都执行成功,要么全都执行不成功 。通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。如果系统只执行这些操作的一个子集,则可能会破坏事务的总体目标。原子性消除了系统处理操作子集的可能性。 C –Consistency 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说 一个事务执行之前和执行之后都必须处于一致性状态 。 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

kafka实现分布式事务

笑着哭i 提交于 2019-11-30 19:14:35
分布式事务 概念: 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。 本质上来说,分布式事务就是为了保证不同数据库的数据一致性。实现分布式事务方案有很多种,有阿里的seata,基于tcc的高性能分布式事务框架hmily和lcn等开源框架外,还有基于mq来实现分布式事务解决方案(常见的有rabbitmq、kafka等)。本文介绍基于kafka简单实现原理。 描述: 不同于单一架构应用(Monolith), 分布式环境下, 进行事务操作将变得困难, 因为分布式环境通常会有多个数据源, 只用本地数据库事务难以保证多个数据源数据的一致性. 这种情况下, 可以使用两阶段或者三阶段提交协议来完成分布式事务.但是使用这种方式一般来说性能较差, 因为事务管理器需要在多个数据源之间进行多次等待. 有一种方法同样可以解决分布式事务问题, 并且性能较好, 这就是我这篇文章要介绍的使用事件,本地事务以及消息队列来实现分布式事务. 我们从一个简单的实例入手. 基本所有互联网应用都会有用户注册的功能. 在这个例子中, 我们对于用户注册有两步操作: 注册成功, 保存用户信息.

hibernate二级缓存理解

血红的双手。 提交于 2019-11-30 16:50:10
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。 缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。 Hibernate的缓存包括 Session 的缓存和 SessionFactory 的缓存。 其中SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。 Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。 SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。 SessionFactory的内置缓存中存放了映射元数据(metadata)和预定义SQL语句(preparedstatement) 映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来 SessionFactory的内置缓存是只读的

分布式一致性算法

三世轮回 提交于 2019-11-30 14:51:23
分布式一致性理论 CAP 理论 一个分布式系统 不可能同时满足 一致性( C:Consistency ),可用性( A: Availability )和分区容错性( P:Partition tolerance )这三个基本需求, 最多只能同时满足其中的 2 个 。 如下: 选项 描述 C(Consistence) 一致性 ,指数据在多个副本之间能够保持一致的特性( 严格的一致性 )。 A(Availability) 可用性 ,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据。 P(Network partitioning) 分区容错性 ,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。 Base 理论 BASE 是 Basically Available (基本可用) ,Soft state (软状态),和 Eventually consistent (最终一致性)三个短语的缩写。 既是无法做到 强一致性 ( Strong consistency ),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到 最终一致性 ( Eventual consistency ) 基本可用 允许出现响应时间损失或者功能损失。 软状态 允许系统中的数据存在中间状态

2019.9.26学习内容及小结

孤街浪徒 提交于 2019-11-30 14:28:58
复习 ''' 1.单表查询 增删改查的完整语法 select distinct 字段 from 表 where group by having order by limit 比较: > < = 区间: between and | in | not in 逻辑: and or not 相似: like _% (一个 _ 代表 一个任意字符, % 代表不限制数量任意字符) 正则: regexp '.*[0-9]' 表示包含数字[0-9],用 not regexp '.*[0-9]' 就是不包含数字 聚合函数: group_concat()、max()、min()等;注:group_concat就是将字段合在一起,用于group by的拼接,用法和直接concat是一样的 也可以用于直接加上某条字段:group_concat(name) 名字, 来用于group by 后面没有字段的情况 having: 可以对 聚合函数 结果进行筛选,不能使用 聚合函数 别名 order by: 分组后对 聚合函数 进行排序,能使用 聚合函数 别名 limit: 条数 | 偏移量,条数 如limit(5,3), 过滤掉前五条数据,取出之后三条数据 2. 多表查询 内连接:from emp [inner] join dep on emp.dep_id = dep.id :只保留两表有对应关系的记录 左连接

关系型数据库基础总结

爷,独闯天下 提交于 2019-11-30 14:23:13
关系型数据库架构 整体思维架构 架构 如何设计一个关系型数据库 1、需要一个文件存储系统(RDBMS) 2、需要一个程序实例(对存储系统进行逻辑管理) 包括:存储管理、缓存机制、SQL解析、日志管理、权限划分、容灾机制、索引管理、锁管理 索 引 为什么要使用索引 快速查询数据 什么样的信息能成为索引 主键、唯一键以及普通键等 索引的数据结构 1、生成索引,建立二叉查找树进行二分查找 2、生成索引,建立B-Tree结构进行查找 3、生成索引,建立B+-Tree结构进行查找 4、生成索引,建立Hash结构进行查找 B-Tree定义: 1、根节点至少包括两个孩子 2、树种每个节点最多含有m个孩子(m>=2) 3、除根节点和叶节点外,其他每个节点至少有ceil(m/2)(取上限)个孩子 4、所有叶子节点都位于同一层 5、 B+-树的定义 1、非叶子节点的子树指针与关键字个数相同 2、非叶子节点的子树P[i],指向关键字值[K[i],K[i+1]]的子树 3、非叶子节点仅用来索引,数据都保存在子节点中 4、所有叶子节点均 有一个链指针指向下一个叶子节点 hash索引的缺点: 1、仅仅能满足 “=”,“in”,不能使用范围查询 2、无法被用来避免数据的排序操作 3、不能利用部分索引键查询 4、不能避免表扫描 5、遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高

08.Django基础六之ORM中的锁和事务

烈酒焚心 提交于 2019-11-30 14:22:18
一 锁    行级锁     select_for_update(nowait=False, skip_locked=False) #注意必须用在事务里面,至于如何开启事务,我们看下面的事务一节。     返回一个锁住行直到事务结束的查询集,如果数据库支持,它将生成一个 SELECT ... FOR UPDATE 语句。     举个例子: entries = Entry.objects.select_for_update().filter(author=request.user) #加互斥锁,由于mysql在查询时自动加的是共享锁,所以我们可以手动加上互斥锁。create、update、delete操作时,mysql自动加行级互斥锁     所有匹配的行将被锁定,直到事务结束。这意味着可以通过锁防止数据被其它事务修改。     一般情况下如果其他事务锁定了相关行,那么本查询将被阻塞,直到锁被释放。 如果这不想要使查询阻塞的话,使用select_for_update(nowait=True)。 如果其它事务持有冲突的锁,互斥锁, 那么查询将引发 DatabaseError 异常。你也可以使用select_for_update(skip_locked=True)忽略锁定的行。 nowait和  skip_locked是互斥的,同时设置会导致ValueError。     目前

第一阶段:Python开发基础 day45 数据库基础知识之子查询视图的相关操作事务和游标等

房东的猫 提交于 2019-11-30 13:36:29
目录 复习 案例 联合分组 子查询 all与any:区间修饰条件 视图:view 视图的增删改 事务 pymysql:python操作mysql 游标操作 pymysql事务 sql注入 索引 复习 """ 1、单表查询 增删改查的完整语法 select distinct 字段 from 表 where group by having order by limit 比较:> < = 区间:between and | in | not in 逻辑: and or not 相似:like _% 正则:regexp 聚合函数:group_concat()、max() having:可以对 聚合函数 结果进行筛选,不能使用 聚合函数 别名 order by:分组后对 聚合函数 进行排序,能使用 聚合函数 别名 limit:条数 | 偏移,条数 2、多表查询 内连接:from emp inner join dep on emp.dep_id = dep.id 只保存两表有对应关系的记录 左连接:from emp left join dep on emp.dep_id = dep.id 左表记录全部保存,右边没有对应记录空填充 右连接:from emp right join dep on emp.dep_id = dep.id 右表记录全部保存,左边没有对应记录空填充 全连接: from

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架

烂漫一生 提交于 2019-11-30 12:26:35
简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一。因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback)。从而还部分确保了事务的 ACID 属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点。当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要。但是,一旦SQL SERVER发生崩溃时,了解事务日志的原理和概念对于快速做出正确的决策来恢复数据显得尤为重要.本系列文章将会从事务日志的概念,原理,SQL Server如何使用日志来确保持久性属性等方面来谈SQL Server的事务日志. 事务日志的物理组织构架 事务日志仅仅是记录与其对应数据库上的事务行为和对数据库修改的日志文件.在你新建数据库时,伴随着数据库文件,会有一个默认以ldf为扩展名的事务日志文件. 当然,一个数据库也可以配有多个日志文件,但是在逻辑上,他们可以看成一个. 在SQL Server对于日志文件的管理,是将逻辑上一个ldf文件划分成多个逻辑上的虚拟日志文件(virtual log files,简称VLFs).以便于管理。用个类比方法来看,日志文件(ldf)好比一趟火车,每一节车厢都是一个虚拟日志文件(VLFs): 那为什么SQL

浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色

若如初见. 提交于 2019-11-30 12:26:23
简介 每一个SQL Server的数据库都会按照其修改数据(insert,update,delete)的顺序将对应的日志记录到日志文件.SQL Server使用了Write-Ahead logging技术来保证了事务日志的原子性和持久性.而这项技术不仅仅保证了ACID中的原子性(A)和持久性(D),还大大减少了IO操作,把对数据的修改提交到磁盘的工作交给lazy-writer和checkpoint.本文主要讲述了SQL Server修改数据时的过程以及相关的技术。 预写式日志(Write-Ahead Logging (WAL)) SQL Server使用了WAL来确保了事务的原子性和持久性.实际上,不光是SQL Server,基本上主流的关系数据库包括oracle,mysql,db2都使用了WAL技术. WAL的核心思想是: 在数据写入到数据库之前,先写入到日志. 因为对于数据的每笔修改都记录在日志中,所以将对于数据的修改实时写入到磁盘并没有太大意义,即使 当SQL Server发生意外崩溃时,在恢复(recovery)过程中那些不该写入已经写入到磁盘的数据会被回滚(RollBack),而那些应该写入磁盘却没有写入的数据会被重做(Redo)。从而保证了持久性(Durability) 但WAL不仅仅是保证了原子性和持久性。还会提高性能. 硬盘是通过旋转来读取数据,通过WAL技术