前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊PG中事务隔离级别

聊聊PG中事务隔离级别

作者头像
用户4700054
发布于 2023-02-26 06:45:52
发布于 2023-02-26 06:45:52
5430
举报
数据库中的现象
  • Lost Updates现象:两个事务同时并发更新一个行数据,第一个事务更新完毕后,第二个事务没有考虑第一个事务的任何变更而进行数据变更的问题。比如A、B事都做转账10元给X账户操作,A事务在账户X(已有1元)完成转账这时候X账户有11元,而B事务这是开始转账读取X账户的11元,在转账1元,这时候X账户有12元,整个过程客户丢失了1元
  • Dirty Reads and Read Uncommitted现象:一个事务读取另外一个事务未提交的事务的数据这个就是脏读
  • Non-Repeatable Reads and Read Committed现象:不可重复读发生在一个事务A内读取同一行数据多次,每次读取的结果都不同。这个现象是这个事务A内读取数据时候其他事务更新或者删除这一行,并且已经提交,从而导致A事务内多次读取同一行得到不同的结果
  • Phantom Reads and Repeatable Read现象:幻读一个事务A内多次执行查询表X返回一个特定的结果集合,这时候事务B在表X中新增多行数据然后提交这些变更,事务A在执行查询会发现第一次和第二次查询的结果结果结合不同
  • No Anomalies and Serializable现象:序列化是阻止脏读、不可重复度、幻读的隔离级别,也是性能最差的。
隔离级别介绍
隔离级别的简单认知
  • 如果数据库中的多行数据在更新时候会被锁定,针对read不会被锁定那么这就认为是Read Uncommited Level
  • 如果数据库中多行数据在被更新的时候读和写都被会锁定,那么我们可以认为这是Read Commited Level,在这个隔离级别中多次查询一行数据返回不同结果的现象
  • 如果锁定据库中被读取行数据和更新的行数据,这个时候可以认为是Repeatable Read Level,在这个隔离级别内一个事务内多次查询一行数据得到的结果是一样的
PG中的隔离级别
  • 数据库的隔离级别实现中离不开transaction,数据库一般实现是基于锁实现来管理事务,而在PG中采用基于snapshot isolation protocol来管理事务,PG中的snapshot包含了当前所有已经提交的变更。snapshot isolation是最小化的lock的事务管理方案,在实际实现中并发的更新同一行数据会被加锁,在其他的情况下并发执行写不阻塞读,读不需要任何锁。
  • PG中的MVCC基于snapshot isolation protocolMVCC可以做到并发操作一行数据情况下可以保存这行数据在不同时刻的多个版本。
  • PG中Read Commit是默认的隔离级别,它能够适配和满足多种应用需求。但是不会终止任何任何维护数据一致性的行为;Repeatable Read隔离隔离级别消除了数据不一致的问题,针对只读事务的选择。Serializable隔离级别是最严格的隔离级别,性能是相对较差的,但是数据一致性能得到完美的保障。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 存储内核技术交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Java集合框架知识整理
Java集合框架主要由Collection和Map两个根接口及其子接口、实现类组成。
Abalone
2022/07/14
6380
Java集合框架知识整理
Java集合详解【面试+工作】
在说集合前我们不得不说一下数组 数组的作用: 存放一组相同的数据类型(基本或对象)的数据,从而实现对数据的管理 优势:可以快速的通过下标对数组元素进行访问,效率高 劣势:容量实现定义好了,不能随着需求变化而扩容 因此出现了更好的集合框架 一、数组和集合的比较 数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下: 1:数组能存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身! 2:数组容易固定无法动态改变,集合类容量动态改变。
Java帮帮
2018/03/15
2K0
Java集合详解【面试+工作】
java集合详解和集合面试题目
数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。
全栈程序员站长
2022/09/05
6810
Java集合面试题&知识点总结(上篇)
解答:Java 集合类呢主要是指 java.Util包 下的集合容器。主要包含三种:List、Set、Map,其中 List、Set 主要继承自 Collection 接口,然后它们三个又都依赖了 Iterator 迭代器;
栗筝i
2023/10/29
2790
死磕 java集合之TreeSet源码分析
TreeSet底层是采用TreeMap实现的一种Set,所以它是有序的,同样也是非线程安全的。
彤哥
2019/07/08
4640
死磕 java集合之TreeSet源码分析
Java集合框架详解(全)
集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。
硕人其颀
2020/06/02
1.1K0
Java集合面试题[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 Java集合面试题 Java 集合框架的基础接口有哪些? Collection ,为集合层级的根接口。一个集合代表一组对象,这些对象即为它的元素。Java 平台不提供这个接口任何直接的实现。 Set ,是一个不能包含重复元素的集合。这个接口对数学集合抽象进行建模,被用来代表集合,就如一副牌。 List ,是一个有序集合,可以包含重复元素。你可以通过它的索引来访问任何元素。List 更像长度动态变换的数组。 Map ,是一个将 key 映射到 value 的对
全栈程序员站长
2022/07/23
5730
老哥,您看我这篇Java集合,还有机会评优吗?
集合在我们日常开发使用的次数数不胜数,ArrayList/LinkedList/HashMap/HashSet······信手拈来,抬手就拿来用,在 IDE 上龙飞凤舞,但是作为一名合格的优雅的程序猿,仅仅了解怎么使用API是远远不够的,如果在调用API时,知道它内部发生了什么事情,就像开了透视外挂一样,洞穿一切,这种感觉才真的爽,而且这样就不是集合提供什么功能给我们使用,而是我们选择使用它的什么功能了。
cxuan
2020/08/07
5900
老哥,您看我这篇Java集合,还有机会评优吗?
杰哥教你面试之一百问系列:java集合
集合是我们在java中经常会用到的东西,熟悉了集合我们就熟悉了java。当面试官在Java面试中涉及到Java集合的问题时,通常会涉及到集合的概念、类型、常见操作、性能等方面的内容。
程序那些事
2023/09/12
2730
深入浅出的分析 Set集合
原文链接:https://blog.csdn.net/javageektech/article/details/103077788
chenchenchen
2019/11/26
5300
Java 集合常见知识点&面试题总结(上),2022 最新版!
Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有三个主要的子接口:List、Set 和 Queue。
Guide哥
2022/11/07
3390
Java 集合常见知识点&面试题总结(上),2022 最新版!
Java集合解惑
本文取自工匠若水的qq群里的Java基础题目,把里面有关Java集合放在一起。 全文github地址
1025645
2018/08/23
6910
Java集合分类以及各自特点
常用的就是ArrayList,LinkedList,HashSet,LinkedHashSet,TreeSet,HashMap,LinkedHashMap,TreeMap; 数组和集合的区别 区别1: 数组可以存储基本数据类型/引用数据类型 基本数据类型存的是值 引用数据类型存的是地址 数组在创建的时候 就会定义存储的数据类型 也就是只能存储一种数据类型 集合只能存储引用数据类型(对象) 集合中也可以存储基本数据类型(装箱)最终存储的还是 Object 如果没有泛型限定 默认存储的都是 Object类型的数据 也就是任意类型 区别2 数组长度是固定的,不能自动增长 集合是长度可变的,根据元素的多少来决定长度
全栈程序员站长
2022/09/01
5400
40个Java集合面试问题和答案
每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。集合框架的部分优点如下:
田维常
2019/07/16
8220
大厂必问的Java集合面试题
本文已经收录到github仓库,此仓库用于分享互联网大厂高频面试题、Java核心知识总结,包括Java基础、并发、MySQL、Springboot、MyBatis、Redis、RabbitMQ等等,面试必备!欢迎大家star!
程序员大彬
2022/01/06
1.5K0
大厂必问的Java集合面试题
Java学习笔记——集合
存储对象可以使用数组 (基本数据类型 & 引用数据类型) 和集合 (引用数据类型),用数组存储对象的弊端有:一旦创建,其长度不可变;数组中真正存储的对象个数不可知,除非自定义类。使用集合可以解决这些问题。
梦飞
2022/06/23
2740
Java学习笔记——集合
深入探索Java集合框架
Java集合框架位于java.util包中,是Java编程语言的核心部分。它定义了几种类型的集合,包括列表(List)、集合(Set)、队列(Queue)、双端队列(Deque)以及映射(Map)。这些集合类型通过统一的接口和抽象类来实现,从而提供了对数据的一致视图。
公众号:码到三十五
2024/03/19
2350
Java 集合框架(7)---- Set 相关类解析
在上篇文章中,我们将剩下的常见的 Map 接口下的相关具体类做了一个解析,还有一些相关的类将会在下一篇文章中做一个总结,这篇我们来看看 Set 接口的相关类。老规矩,还是继续看一下 Set 接口下继承关系图:
指点
2019/01/18
5180
Java 集合框架(7)---- Set 相关类解析
Java--集合类之Collection与Map
上一篇:Java--集合类之Vector、BitSet、Stack、Hashtable 集合(Collection):一组单独的元素,通常应用了某种规则。在这里,一个 List(列表)必须按特定的顺序容纳元素,而一个Set(集)不可包含任何重复的元素。相反,“包”(Bag)的概念未在新的集合库中实现,因为“列表”已提供了类似的功能。 映射(Map):一系列“键-值”对(这已在散列表身上得到了充分的体现)。从表面看,这似乎应该成为一个“键-值”对的“集合”,但假若试图按那种方式实现它,就会发现实现过程相当笨拙
SuperHeroes
2018/05/22
9450
JavaSE(八)集合之Set
今天这一篇把之前没有搞懂的TreeSet中的比较搞得非常的清楚,也懂得了它的底层实现。希望博友提意见! 一、Set接口 1.1、Set集合概述   Set集合:它类似于一个罐子,程序可以依次把多个对象 “丢进” Set 集合,而 Set 集合通常不能记住元素的添加的顺序,也就是说Set 集合是无序的。         Set 集合与 Colleaction 基本相同,没有提供额外的方法,实际上 Set 就是 Collection,只是行为略有不同(Set 不允许包含重复元素)。 1.2、Set类型集合特点
用户1195962
2018/01/18
1K0
JavaSE(八)集合之Set
相关推荐
Java集合框架知识整理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档