事务处理

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645

事务处理

事务是保证数据完整性的一种手段。

事务具备 ACID 原则(包括原子性、一致性、独立性及持久性),保证一个人更新数据的时候,其他人不能更新。

在 Oracle 中,SQL Plus 是一个客户端。但是对于 Oracle 服务而言,每一个 SQL Plus 客户端都是独立的,都使用一个session 描述。

如下图所示。所有的更新都是暂存在缓冲区,直到提交为止,在没有提交之前,还可以使用回滚操作恢复数据到原始状态

事务处理提供了两个核心命令

提交事务:commit

回滚事务:rollback

真正使用 commit 提交后才表示更新已经正常完成。所有的更新操作都需要被事务所保护 

例如,小桃要给小李汇款

1. 从小桃的账户上减少 5000 万元

2. 在小李的账户上增加 5000 万元

3. 扣除转账手续费 50 元

假如说现在第 2 步没有实现,小桃的账上应该恢复 5000 万元,但是如果没有事务处理,现在更新金额,就表示数据已经正常提交了,不管小李的账户上是否增加,小桃的金额都会减少。所以事务的好处是在一组更新操作全部完成之后再进行提交处理,这样才可以保证数据的完整性

概括起来,事务处理的概念就是整个操作要成功就一起成功,要失败就退回原点

如果按照之前的讲解,每一个 session 都进行自己的事务处理,那么如果现在两个 session 同时操作了同一条数据该如何呢?

第一个 session 更新员工编号为 7566 的员工信息

update myemp set sal=5000 where empno=7566;

此时的 session 并没有提交或回滚事务

第二个 session 更新员工编号为 7566 的员工信息

update myemp set comm=9000 where empno=7566;

 此时发现更新操作并不能完成,因为两个不同的 session 更新了同一条数据,那么此时就会出现一种情况:

在第一个 session 没有提交或回滚之前,第二个 session 要一直等待第一个 session 更新完成才能进行自己的操作

所以在事务的处理过程中,存在行级锁定的概念,在提交或回滚更新之前,只能有一个 session 操作数据,即事务的隔离性 

虽然这种事务的处理很方便,但是这种锁定就很麻烦了

假设一个站点平均每秒在线人数有 300 人,并且假设这个站点的用户有 3000 万个(这 3000 万个用户如果要登录,还需要进行一些数据表的更新操作)

突然有一天,网站的老板让你把所有用户的某一个字段的内容统一更新为一个数据

那么这个时候有两个解决方案 

1.直接发出 update更新全部指令,目的是让 3000 万条数据一起完成更新

假设现在每更新 10 条数据需要 1 秒时间,总的更新时间为 3000000 秒(大约 34 天)

这就意味着在这 34 天之内,因为事务的隔离,所有的用户无法登录

在整个程序的世界里面只有两个方法可以评价程序:时间复杂度、空间复杂度。现在发现,第一种做法实际上是拿时间换空间

2.按照这个时间换空间的思路,可以利用一个周期来完成

不直接更新所有的用户信息,而是让每一个用户信息,在使用的时候才进行更新

虽然不是所有的用户立刻都发生了改变,但是慢慢地大部分的活跃用户就都进行了修改,而那些僵尸用户,可以再集中进行处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/431114.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# 中 TryParse 将字符串转换为特定类型的方法

在 C# 中,TryParse 是一个用于将字符串转换为特定类型的方法。它用于尝试解析字符串并将其转换为指定类型的值,而不会引发异常。如果解析成功,它将返回 true 并将解析结果存储在输出参数中;如果解析失败,它将返回 fals…

C# 中 Math.Round 数学函数

在 C# 中,Math.Round 是一个数学函数,用于对一个浮点数进行四舍五入操作。它接受一个浮点数作为输入,并返回一个最接近输入值的整数或指定小数位数的浮点数。 Math.Round 方法有多个重载,其中最常用的重载有以下两种形式&#xf…

就业班 2401--3.5 Linux Day11--DNS解析

DNS域名解析服务 少壮不努力,老大徒伤悲。一、 1.DNS介绍 DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,…

「项目实践」如何实现导购推荐“千人千面”

前言 在电商背景下,为用户提供精准的导购推荐不仅能极大提升购物体验,也成为推动业务增长的关键驱动力。随着人工智能和数据科学的快速发展,实现“千人千面”的个性化推荐已不再是无法触及的梦想。如何在众多商品中准确捕捉用户的偏好&#…

进口及国内细胞分析仪厂家名录大全-贝克曼、安捷伦、希森美康、迈瑞.....

流式细胞仪是一种测量层流中细胞的设备(细胞仪),其通过将每个细胞排列在鞘液中,加以激光束照射,可测量散射光和荧光,从而获得有关每个细胞的信息,包含细胞结构(如大小、粒度、表面积…

Java知识点总结(二)

ID生成策略 主键自增id 主键自动增长,不用手工设值、数字型,占用空间小、检索非常有利、有顺序,不会重复,但在迁移旧数据是会出现id冲突 UUID 基于时间,计数器和地址生成32位的id redis生成id 原子性自增,并…

记录一次排查负载均衡不能创建的排查过程

故障现象,某云上,运维同事在创建负载均衡的时候,发现可以创建资源,但是创建完之后,不显示对应的负载均衡。 创建负载均衡时候,按f12发现console有如下报错 后来请后端网络同事排查日志发现,是后…

探秘X-XSS-Protection头对抗跨站脚本攻击

欢迎来到我的博客,代码的世界里,每一行都是一个故事 探秘X-XSS-Protection头对抗跨站脚本攻击 前言XSS攻击的威胁X-XSS-Protection头的作用X-XSS-Protection头的配置报告模式(Report-Only)攻击与绕过X-XSS-Protection的方法 前言 …

(学习日记)2024.03.04:UCOSIII第六节:main函数+前六节总结

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

android开发教程视频,android组件化和插件化

第一阶段:Android 基础知识回顾: 回顾Android 开发编程,深入理解Android系统原理和层次结构,深入分析Handler源码和原理;回顾Java,C/C,Kotlin、dart 在Android开发中必用的语言,熟悉…

DQL语言学习(2024/3/5)one

1.基础查询: select 查询列表 from 表名; 查询列表可以是:①表中的字段、②常量值、③表达式、④函数 ①查询表中的单个字段,多个字段,所有字段 select *from 表名; ③查询表达式: select 100*98; ④…

软件设计师10--计算机组成与体系结构章节回顾

软件设计师10--计算机组成与体系结构章节回顾 章节重要内容考情分析 章节重要内容 考情分析

css使用

一、什么是CSS <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>div{color: red;}</style> </head> <body><div>Hello CSS</div></…

MySQL——性能调优

性能调优&#xff08;重要&#xff09; SQL 优化的目的 减少磁盘 IO&#xff1a;尽可能避免全表扫描、尽量使用索引、尽量使用覆盖索引减少回表操作减少 CPU 和内存的消耗&#xff0c;尽可能减少排序、分组、去重之类的操作&#xff0c;尽量减少事务持有锁的时间 优化途径&…

QEMU设备直通pass through的地址映射转换

[内核:HVA]->[QEMU:HVA]的mmap地址映射 $ sudo cat /proc/2047239/maps | grep -i vfio address perms offset dev inode pathname 7f4b5444a000-7f4b5445a000 rw-s 9da50000 00:0e 13037 anon_inode:[vfi…

稀碎从零算法笔记Day7-LeetCode:罗马数字转整数

题型&#xff1a;字符串转化、找规律 链接&#xff1a;13. 罗马数字转整数 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 …

【HTML】day01

列表 作用&#xff1a;布局内容排序整齐的区域。 列表分类&#xff1a;无序列表、有序链表、定义列表 无序列表 <ul><li>test</li><li>test</li><li>test</li><li><h1>h1</h1></li></ul><!DOCTYPE…

DolphinScheduler——奇富科技的调度实践

目录 一、技术架构 二、业务挑战 2.1 调度任务量大 2.2 运维复杂 2.3 SLA要求高 三、调度优化实践 3.1 重复调度 3.2 漏调度 3.3 Worker服务卡死 3.4 任务重复运行 四、服务监控 4.1 方法耗时监控 4.2 任务调度链路监控 五、用户收益 原文大佬的这篇调度系统案例…

【Gitee】创建第一个仓库并提交第一次代码

目录 第一步&#xff1a;注册登录 第二步&#xff1a;创建第一个仓库 1、我的工作台 → 创建我的仓库 2、填写内容 3、创建 第三步&#xff1a;第一次提交代码 1、参考资料 2、操作 2.1 idea创建项目 2.2 项目内容推送至远程 最后&#xff1a;平台相关资料库 第一步…

1.Zookeeper理论基础

1.Zookeeper的基本概念 是一个分布式应用协调框架 &#xff0c;java编写的。客户端 /服务端 的架构模式。CP设计(一致性&#xff0c;分区容错) 它主要是用来解决分布式应用中经常遇到的一些数据管理问题&#xff0c;如&#xff1a;服务注册服务、状态同步服务、集群管理、分布…