2PL是悲观锁,Pessimistic,这章讲乐观锁,Optimistic,单机的,非分布式的 Timestamp Ordering,以时间为序,这个是非常自然的想法,按每个transaction的时间来排谁先执行 这里会有几个问题,Timestamp是什么,由谁来打,什么时候打上Timestamp 首先每个T需要有一个unique的timestamp,这个在单机很容易实现:其次,Timestamp必须是单调递增的最后,不同的schema会选择在不同的时间给txn打上timestamp,可能是t…
这章主要描述索引,即通过什么样的数据结构可以更加快速的查询到数据 介绍Hash Tables,B+tree,SkipList 以及索引的并行访问 Hash Tables hash tables可以实现O(1)的查询,设计主要考虑两点 首先用什么hash function?底下列出常用的hash function 然后怎么解决collisions?即hash schemes 首先是static hash schemes 第一个方法是Linear probe hashing 方法,如果发现冲突,就往…
并发控制是数据库理论里面最难的课题之一 并发控制首先了解一下事务,transaction 定义如下, 其实transaction关键是,要满足ACID属性, 左边的正式的定义,由于的intuitive的理解其中可能Consistency比较难理解一下,其他都比较直观,对于单机数据库而言consistency其实不是个显著的问题,但对于分布式数据库这就是个主要问题 那么问题就是如何设计让Transaction满足ACID? 一种简单的方法就是,Strawman System 串行执行保障consi…
数据库数据丢失的典型场景如下, 数据commit后,还没有来得及flush到disk,这时候crash就会丢失数据 当然这只是fail的一种情况,DataBase Recovery要讨论的是,在各种fail的情况下,如何保证, 1. 已经commit的transaction的数据不丢失:2. 没有部分提交的情况,all or nothing 为了达成这个目的,需要在txn执行的过程中做一些actions保留当时状态,然后在failover后,再执行一系列actions去recover这些状态 F…
Database Storage 存储分为volatile和non-volatile,越快的越贵越小 那么所以要解决的第一个问题就是,如果尽量在有限的成本下,让读写更快些 意思就是,尽量读写volatile存储,但是volatile比较很有限,所以需要合理的在两种存储上去swap 但是技术是在飞速的进步的,所以现在有Non-volatile memory 所以最近流行内存数据库,因为当前的memory和磁盘间的IO瓶颈已经消除,所以当前的瓶颈是CPU cache和Memory之前的问题 这个问题…
首先锁是用来做互斥的,解决并发执行时的数据不一致问题 如图会导致,不可重复读 如果这里用lock就可以解决,数据库里面有个LockManager来作为master,负责锁的记录和授权 数据库里面的基本的锁类型, 其实就是读锁,写锁 但是如果光是有读写锁,只能解决当个操作互斥和正确,无法解决transaction的正确 所以我们需要一个事务级别的锁,就是2PL,两阶段提交 最核心的想法,在growing阶段需要拿到所有需要的锁,否则就会block:shrinking阶段,不能去增加锁,只能释放锁…
OLTP scale-up和scale-out scale-up会有上限,无法不断up,而且相对而言,up升级会比较麻烦,所以大数据,云计算需要scale-out scale-out,就是分布式数据库,刚开始肯定是Shared Nothing,但是分布式也引入了更高的架构复杂度和维护成本 所以现在的趋势,是架构分层,层之间是逻辑的scale-up,层内部是物理的scale-out 最终sharing-everything,其实在架构上又回到了scale-up 所以随着硬件的进步和技术的演进,架构…
MVCC是一种用空间来换取更高的并发度的技术 对同一个对象不去update,而且记录下每一次的不同版本的值 存在不会消失,新值并不能抹杀原先的存在 所以update操作并不是对世界的真实反映,这是一种便于应用的简化实现 MVCC的历史可以追溯到70年代,数据库的主流技术大部分都停滞在那个年代 MVCC,可以解决2PC的频繁读写冲突:使用MVCC只有写写才会存在冲突,大大降低了冲突的概率 而且MVCC还能进行time-travel 例子,DB中有Begin,End表示该version生效的时间周期…
正常应用和数据库交互的过程是这样的, 其实我们也可以把部分应用逻辑放到DB端去执行,来提升效率 User-defined Function Stored Procedures Triggers Change Notification User-defined Types Views UDF 用户定义的function,往往用于select中,不会修改数据本身 UDF可以用SQL实现,也可以用外部语言,右边是PG的例子 Stored Procedure 存储过程,可以理解成在数据库上执行一个脚本…
并发执行,主要为了增大吞吐,降低延迟,提高数据库的可用性 先区分一组概念,parallel和distributed的区别 总的来说,parallel是指在物理上很近的节点,比如本机的多个线程或进程,不用考虑通信代价distributed,要充分的考虑通信代价,failover的问题,更为复杂 Process Model 先解释一下概念, process model,指数据库系统架构设计,用于支持多用户的并发请求 worker,用于执行客户端tasks的DBMS组件 通常的process mode…
查询优化应该是数据库领域最难的topic 当前查询优化,主要有两种思路, Rules-based,基于先验知识,用if-else把优化逻辑写死 Cost-based,试图去评估各个查询计划的cost,选取cost比较小的 一个sql query的处理流程, 先是Parser,生成抽象语法树ast,Binder会去做元数据对应,把parse出来的name对应到数据库中的结构,表,字段等 然后Rewriter就是Rules-based的改写,而Optimizer是cost-based的优化 Rela…
Sorting 排序如果可在内存里面排,用经典的排序算法就ok,比如快排 问题在于,数据表中的的数据是很多的,没法一下都放到内存里面进行排序 所以就需要用到,外排,多路并归排序 看下最简单的,2路并归排序, 设文件分为N个page,memory中一次最多可以放入B个pages 所以在sort过程,一次性可以载入B个page,在内存中page内排序,写回disk,称为一轮,run那么如果一共N个page,需要N/B+1个run 在merge过程,如果双路并归排序,只需要用到3个page的buffe…
Query Model Query处理有三种方式, 首先是Iterator model,这是最基本的model,又称为volcano,pipeline模式 他是top-down的模式,通过next函数去逐层获取tuple 好处是比较简单,并且很容易做limit iterator的例子,输出一个数据,从top开始调用next,这里第二步需要join,建hashtable,需要把3的数据全部读取上来 第二种方式,materialization model 反其道,这是一种bottom-up的方式,每…
CS 265: Research Topics in Database Systems Announcements Quiz 3 will be posted. Good luck! Quiz 2 has been posted. Good luck! Here is the History of a Paper that was mentioned in the Project handout. Please complete this Paper Survey for the first t…
Optimistic concurrency control https://en.wikipedia.org/wiki/Optimistic_concurrency_control Optimistic concurrency control (OCC) is a concurrency control method applied to transactional systems such as relational database management systems and softw…
1.数据并发控制(Data Concurrency Control)简介 数据并发控制(Data Concurrency Control)是用来处理在同一时刻对被持久化的业务对象进行多次修改的系统.当多个用户修改业务对象的状态并试图并发地将其持久化到数据库时,需要一种机制来确保一个用户不会对另一个并发用户的事务状态造成负面影响. 有两种形式的并发控制:乐观和悲观.乐观并发控制假设当多个用户对业务对象的状态同时进行修改时不会造成任何问题,也称为最晚修改生效(last change wins).对于…
Optimistic concurrency control https://en.wikipedia.org/wiki/Optimistic_concurrency_control Optimistic concurrency control (OCC) is a concurrency control method applied to transactional systems such as relational database management systems and softw…
原创地址:http://www.cnblogs.com/jfzhu/p/4009918.html 转载请注明出处   (一)为什么需要并发控制机制 并发控制机制是为了防止多个用户同时更改同一条数据,也可以防止一个用户在更改数据的同时造成另一个用户看到"过期"的数据.下面看一个例子就明白了. John和Marry有一个联合银行帐户,帐户的余额是$1000,John向帐户里存入了$500,Marry取走了$500,如果没有并发控制,John最后看到的余额是$1500,而Marry看到的帐户…
MVCC(Multi-Version Concurrency Control)是一种多版本并发控制机制.…
默认情况下, MySQL的Innodb事务隔离级别是重复读 repeatable read, SELECT @@GLOBAL.tx_isolation, @@tx_isolation;REPEATABLE-READ    REPEATABLE-READ 进行以下测试, 同时开两个session, S1 和 S2, 都将autocommit关掉 ; 测试使用的是一张简单的表, 只有一行数据 CREATE TABLE `t1` ( `v1` ) ', `v2` ) ', `version` medi…
转载:https://www.cnblogs.com/flying-tiger/p/9567213.html#4121483#undefined PostgreSQL为开发者提供了一组丰富的工具来管理对数据的并发访问.在内部,数据一致性通过使用一种多版本模型(多版本并发控制,MVCC)来维护.这就意味着每个 SQL 语句看到的都只是一小段时间之前的数据快照(一个数据库版本),而不管底层数据的当前状态.这样可以保护语句不会看到可能由其他在相同数据行上执行更新的并发事务造成的不一致数据,为每一个数据…
上文我们讨论了PostgreSQL的MVCC相关的基础知识以及实现机制.关于PostgreSQL中的MVCC,我们只讲了元组可见性的问题,还剩下两个问题没讲.一个是"Lost Update"问题,另一个是PostgreSQL中的序列化快照隔离机制(SSI,Serializable Snapshot Isolation).今天我们就来继续讨论. 3.2 Lost Update 所谓"Lost Update"就是写写冲突.当两个并发事务同时更新同一条数据时发生.&quo…
这篇博客将MVCC讲的很透彻,以前自己懂了,很难给别人讲出来,但是这篇文章给的例子就让人很容易的复述出来,因此想记录一下,转载给更多的人 转自:https://www.cnblogs.com/flying-tiger/p/9567213.html PostgreSQL为开发者提供了一组丰富的工具来管理对数据的并发访问.在内部,数据一致性通过使用一种多版本模型(多版本并发控制,MVCC)来维护.这就意味着每个 SQL 语句看到的都只是一小段时间之前的数据快照(一个数据库版本),而不管底层数据的当前…
1. INTRODUCTION   The main goal of the National Computer Security Center is to encourage the widespread availability of trusted computer systems. In support of that goal a metric was created, the Department of Defense Trusted Computer System Evaluati…
http://www.dadbm.com/database-hang-row-cache-lock-concurrency-troubleshooting/ Issue backgroundThis post will help to analyze Oracle database instance slowdown that can happen due to considerable row cache lock (enqueue) wait events. It’s is based on…
Methods and systems are provided to control the execution of a virtual machine (VM). A VM Monitor (VMM) accesses VM Control Structures (VMCS) indirectly through access instructions passed to a processor. In one embodiment, the access instructions inc…
In information technology and computer science, especially in the fields of computer programming, operating systems, multiprocessors, and databases, concurrency control ensures that correct results for concurrent operations are generated, while getti…
https://en.wikipedia.org/wiki/Multiversion_concurrency_control Multiversion concurrency control (MCC or MVCC), is a concurrency control method commonly used by database management systems to provide concurrent access to the database and in programmin…
http://getakka.net/docs/concepts/terminology Terminology and Concepts In this chapter we attempt to establish a common terminology to define a solid ground for communicating about concurrent, distributed systems which Akka.NET targets. Please note th…
http://sqlite.org/whentouse.html Appropriate Uses For SQLite SQLite is not directly comparable to client/server SQL database engines such as MySQL, Oracle, PostgreSQL, or SQL Server since SQLite is trying to solve a different problem. Client/server S…