StanfordDB class自学笔记 (11) Indexes and Transactions
Indexes
- 提高数据库性能的原始机制
- 持续的数据结构,存在数据中
- 有很多有趣的实现问题
下面说的主要是注重在用户、应用层
用处
具体的来说,用户访问的不是index,使用的是query索引机制
通过查询语句返回的是index索引
潜在的数据结构有两种,平衡树或者哈希表 其中哈希表的使用情况比较单一,而平衡树的使用情况适合更多情况,如上图!
许多DBMS自动构建索引 PRIMARY KEY(有时是UNIQUE)属性
Index的缺点
- 需要额外的空间(需要支持的数据结构)-小影响
- 创造index需要花费时间 -中影响
- 保持index 特别是指需要经常修改的数据库-大影响
Benefit of an index depends on:
- Size of table (and possibly layout)
- Data distributions
- Query vs. update load
Physical design Advisor
physical design 是指在数据库中使用什么index
输入是database的数据以及workload(query和update语句)
输出是推荐的index
physical design 的运作成功非常依赖数据库系统中已有的一个东西 :Query Optimizer,工作原理如下图所示。
Transaction简介
由两个独立的需要而产生
- 并发数据访问(Concurrent database access)
- 防止抵御系统错误(Resilience to System Failures)
并发数据库访问(Concurrent database access)
并发访问可能会引起 Attribute-level Inconsistency、Tuple-level Inconsistency、Table-level Inconsistency、Multi-statement inconsistency等一些问题。
并发问题的一个简单解决方式就是单独分开执行不同的sql语言
但是有时候我们想要使得并发,并且不会发生问题,我们就有很多解决措施。比如多处理器、多线程、系统提供异步I/O。甚至有五个客户端在访问处理数据库,但是每个客户端处理数据库的不同部分,这样也可以实现并发。
抵制系统错误(Resilience to System Failures)
系统错误是指比如我们在传输数据进入数据库系统的时候,由于软件、硬件甚至电源问题,导致传输数据到一半时失败。
我们想要实现 Guarantee all-or-nothing execution, regardless of failures!即成功的时候实现所有的操作,失败了不做任何操作!
上面讲的两种情况可以用Transcation技术解决!
简单的说,可以一个Transaction想象成很多的SQL操作,组成了一个uint!可以利用“commit”进行标识。
Transactions Property(ACID)
Isolation 性质
每个操作可以是相互间隔的,但是每次执行必须是按照一定的序列化transaction执行,比如按照T1、T2、T9、T10、T3这样的顺序执行
Durability性质
下图中,s1s2s3commit后 ,系统crash了,不影响他们已经对数据库造成的改变。原理是logging原理,但是这节课不会介绍到实现原理。
Atomicity性质
下图中 在s1s2执行后 commit前crash,那么整个T2不对数据库造成影响,实现的原理也是基于logging。
在之前我们提到的atomicity性质,在这个过程中取消已经进行的部分操作称为Transaction Rollback (= Abort)
Transaction Rollback 可以是由系统引起的,也可以由我们的客户端引起,由客户端引起的见下图
但是要注意的是,rollback操作只对数据库中的系统进行操作,假如在rollback中有一些修改数据库的操作,那么rollback不会undo这些操作
Consistency
consistency讲的是Transaction如何与integrity constraints 作用。。这里我没太搞明白是什么意思。
网上有篇文章说:事务必须是使数据库从一个一致性状态变到另一个一致性状态,一致性与原子性是密切相关的。比如A向B转账,不可能A扣了钱,B却没收到(这就是非一致性)
Isolation Level
有三种isolation level,并且每个Transaction可能有不同的level,互不影响。
Dirty Read
“Dirty” data item: written by an uncommitted transaction
一个transaction与其他未commit transaction中的操作产生并发问题。
Read Uncommitted
此时transaction可能会有dirty read,此时采用read uncommitted是因为也许我们并不在意此时产生的并发问题,我们只在乎更多的效率、性能。
Read Uncommitted
此时一个trasaction可能不会有dirty read(我的天,这和上面的也没区别啊!)
此时我们:Still does not guarantee global serializability
此时也是不太在意并发问题,只关注性能。
Repeatable Read
此时的trasaction可能不会有dirty read,并且一个多次访问的item不会改变value,不过这样还是不能保证global serializability。
此时的一个relation可以change。
我们在数据库中读取的某个值的时候会被lock,但是插入的时候不会lock,删除的时候value会被lock。
总结
StanfordDB class自学笔记 (11) Indexes and Transactions相关推荐
- 合同相似可逆等价矩阵的关系及性质_线性代数预习自学笔记-11:等价性与相似性...
上一篇:线性代数预习自学笔记-10:线性变换 一.相似矩阵 根据矩阵表示定理,我们知道任意向量空间上的任意线性变换都可以用一个相应的矩阵表示:但一个棘手的问题是,在应用这个定理时,我们不可避免地需要先 ...
- python自学笔记11之文件(文本、CSV)
打开文件: with open("x.txt") as f1, open('xxx.txt') as f2: do something with f1,f2 with-as表达式极 ...
- DWR自学笔记(1)HelloWorld
DWR自学笔记(1)HelloWorld 由于新公司的项目是基于DWR的,所以准备自学DWR,参考资料方佳玮的<DWR中文文档v0.9>,百度文献等.学习主要基于DWR3.0,很多方法之前 ...
- 程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(1)调制与编码_程序阅读
程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(1)调制与编码_程序阅读 在粗浅地掌握了LTE知识后,从今天开始对<全面详解LTE:MATLAB建模仿真与实现>一书的学习. ...
- 基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)
注意:本篇为50天后的Java自学笔记扩充,内容不再是基础数据结构内容而是机器学习中的各种经典算法.这部分博客更侧重于笔记以方便自己的理解,自我知识的输出明显减少,若有错误欢迎指正! 目录 1. CN ...
- JavaWeb自学笔记(一)
JavaWeb自学笔记(一) 学习视频:BV12J411M7Sj 文章目录 JavaWeb自学笔记(一) 1.基本概念 1.1 web应用程序 1.2 静态web 1.3 动态web 2.web服务器 ...
- 【V-REP自学笔记(八)】控制youBot抓取和移动物体
[V-REP自学笔记(八)]控制youBot抓取和移动物体 [导读] 在这一系列的V-REP自学笔记中,我们定了一个小目标,完成一个Demo.使用官方提供的KUKA公司的YouBot机器人模型来实验机 ...
- ADRC自抗扰控制自学笔记(包含simulink仿真)(转载)
他这里让我很好理解了跟踪微分器 非线性PID(准确说是非线性PD,所以可以看到输入是两根线而不是三根线) 也就是说传统PID是线性的?但是不是那些系统是非线性的,比如无人机,平衡车,只是小幅度里近似 ...
- 操作系统,计算机网络,数据库刷题笔记11
操作系统,计算机网络,数据库刷题笔记11 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其s ...
- python自学笔记
https://www.cnblogs.com/secondtonone1/p/6796323.html 恋恋风辰 python自学笔记(一) 我没学过python,通过网上和一些图书资料,自学并且记 ...
最新文章
- Happy New Year 2016
- 无法读取内存属于错误吗_深入了解 JavaScript 内存泄露
- python networkx进行最短路径分析_NetworkX vs Scipy所有最短路径算法
- boost::mp11::mp_replace_at_c相关用法的测试程序
- PhantomJS 一个隐形的浏览器
- pandas tqdm添加进度条
- C++17 fold expression
- matlab连续投影算法SPA使用示例
- gdal 使用 无法解析的外部_【小马哥学习笔记】STM32G071 PD0 PD2引脚使用注意事项...
- lopatkin俄大神精简Windows 10 Pro 19042.487 20H2 PreRelease x86-x64 ZH-CN BIZ(2020-09-01)
- 开源ONE兔3.0社交社区交友婚恋视频即时通讯双端APP原生源码
- 驱动概念(uboot命令)
- oracle 选项,oracle startup的选项-Oracle
- html 盒子 边距,css盒子-内外边距
- jqprint插件打印去掉页眉页脚的方式
- 计算机usb接口失灵,电脑usb接口全部失灵
- C语言数组制作拼图游戏,C语言自制拼图游戏.doc
- 星起航:抖音正在快速分割传统电商平台的市场份额
- leetcode题解-17.电话号码的数字组合
- 学习“网络安全法” 解析公民信息保护
热门文章
- CSS设置一行文字,超出部分自动隐藏
- java基础(七)--- set
- 又延伸到socket去了。
- 服务器配置ssh 登录,取消账号密码登录
- java poi 只能创建?,Java POI使用SS模型创建新的工作簿?
- 单元测试框架TestableMock快速入门(七):常用注解参数
- ElasticSearch全文搜索引擎之查询API篇
- Mybatis批量保存Clob类型时ORA-01461: can bind a LONG value only for insert into a LONG column报错解决方法
- from collections import OrderedDict
- mongodb 的 GridFS 详细分析(二)