您好!欢迎访问亚搏手机在线登录入口!
专注精密制造10载以上
专业点胶阀喷嘴,撞针,精密机械零件加工厂家
联系方式
074-705274899
您当前的位置: 主页 > 案例展示 > 医疗行业 >

医疗行业

亚搏手机在线登录入口-内存数据库解析与主流产物对比(一)

更新时间  2021-12-06 00:31 阅读
本文摘要:内存数据库解析与主流产物对比(一) 8月26日,星环邀请来自华东师范大学软件工程学院的博士生导师宫学庆传授带来《数据库前沿技能系列讲座》,分享数据库业内前沿成长和研究热点。现将宫学庆传授的培训第一讲内容:内存数据库的技能成长分享给大家。 — 基于磁盘的数据库办理系统— 传统的数据库办理系统(DBMS)凡是是接纳基于磁盘的设计,原因在于早期数据库办理系统设计时受到了硬件资源如单CPU、单核、可用内存小等条件的限制,把整个数据库放到内存里是不现实的,只能放在磁盘上。

亚搏手机在线登录入口

内存数据库解析与主流产物对比(一) 8月26日,星环邀请来自华东师范大学软件工程学院的博士生导师宫学庆传授带来《数据库前沿技能系列讲座》,分享数据库业内前沿成长和研究热点。现将宫学庆传授的培训第一讲内容:内存数据库的技能成长分享给大家。

— 基于磁盘的数据库办理系统— 传统的数据库办理系统(DBMS)凡是是接纳基于磁盘的设计,原因在于早期数据库办理系统设计时受到了硬件资源如单CPU、单核、可用内存小等条件的限制,把整个数据库放到内存里是不现实的,只能放在磁盘上。由于磁盘是一个很是慢的存储设备(相对于CPU的速度),因此学术界和工业界成长出的数据库办理系统在架构上都必需适该当时的硬件条件,沿用至今的Oracle和MySQL等数据库办理系统仍然接纳的是这种架构设计。

陪同着技能的成长,内存已经越来越自制,容量也越来越大。单台计较机的内存可以设置到几百GB甚至TB级别。对于一个数据库应用来说,这样的内存设置已经足够将所有的业务数据加载到内存中举行使用。

虽然大数据处置惩罚的数据量可能是PB级此外,但那些数据一般长短布局化的数据。凡是来讲,布局化数据的范围并不会出格大,比方一个银行10年到20年的生意业务数据加在一起可能只有几十TB。

这样范围的布局化数据假如放在基于磁盘的DBMS中,在面临大范围SQL查询和生意业务处置惩罚时,受限于磁盘的I/O机能,许多时候数据库系统会成为整个应用系统的机能瓶颈。假如我们为数据库办事器设置足够大的内存,是否可以仍然接纳本来的架构,通过把所有的布局化数据加载到内存缓冲区中,就可以解决数据库系统的机能问题呢?这种方式虽然可以或许在必然水平上提高数据库系统的机能,但在日志机制和更新数据落盘等方面仍然受限于磁盘的读写速度,远没有发挥出大内存系统的优势。内存数据库办理系统和传统基于磁盘的数据库办理系统在架构设计和内存使用方式上还是有着明明的区别。

— 缓冲区办理方式— 在传统的数据库办理系统中,数据的主存储介质是磁盘。比方,逻辑上的一张表凡是会被映射到磁盘上的一个文件,文件是以数据块(Data Block,也称作Page)的形式存储在磁盘上。对于布局化数据来说,一笔记录会被生存在磁盘上的某个数据块中,可以用数据块ID和Offset/偏移量来暗示该笔记录的详细位置。这种形式的数据块也被称作 Slotted Page,顾名思义是把数据块划分成许多槽位,然后一个Record放在某一个槽位上。

在对某笔记录举行处置惩罚时,可以通过代表该记载地址的Page ID + Offset从磁盘上获取该记载;随后系统会把存储有该笔记录的数据块从磁盘读到缓冲区(Buffer Pool分为多个Frame,每个Frame可以生存一个磁盘块),再从缓冲区将该笔记录读到线程或事务的事情区举行处置惩罚;处置惩罚竣事后将更新的记载写回缓冲区中的数据块,再由数据库办理系统将修悔改的数据块写回到磁盘上。展开全文 基于磁盘的数据库办理系统中的数据会见示例 在基于磁盘的数据库办理系统中,处置惩罚查询时凡是会把整个索引加载到内存,而B+树索引中一个索引节点的巨细凡是是一个数据块。

每个被索引的key值在索引叶子节点中都有对应的索引项,索引项中包罗该key值所对应记载的存储位置(Page ID + Offset);当一个数据块被加载到内存中的缓冲区时,DBMS通过Page Table布局来维护Page ID + Offset的地址与内存缓冲区地址的转换。在会见数据时,先在Page Table中查找是否存在对应的Page ID + Offset,假如没有则说明这笔记录仍然在磁盘上,需要先把磁盘上数据块的读进缓冲区,然后再在Page Table中维护好地址映射关系。详细的实现历程是,DBMS首先会在缓冲区中寻找可用的Frame,假如没有就按照缓冲区替换算法选取脏页(Dirty Page)替换出去;如果选中了某个脏页举行替换,则需要对该位置加Latch锁来包管在替换历程中该位置不会被其他事务会见(Latch后面会先容)。

在脏页写回磁盘后,系统就可以把方针数据块读入到缓冲区中的该位置,再将其在缓冲区中的地址写到Page Table,维护好地址映射关系;在这些操作完成后再将Frame上的Latch锁释放。传统DBMS中的内存地址映射 对于传统基于磁盘的DBMS而言,纵然内存缓冲区足够大,可以将所有数据加载到内存中,但会见数据历程中的地址映射和转换依然存在,只是省掉了将数据块从磁盘加载到内存的开销。纵然数据已经全部被加载到内存,基于磁盘的DBMS机能上与内存数据库比拟还是有很大差距,这是个中一个重要的原因。

总结来看,基于磁盘的DBMS和内存数据库在实现技能上一个重要区别是:在会见数据时,基于磁盘的DBMS需要通过地址映射将数据在磁盘上的地址转换成在内存中地址,而内存数据库在设计上则是直接使用数据在内存中的地址。— 事务ACID属性包管 — 在数据库办理系统中,需要包管并发会见场景下事务的ACID属性,即事务的原子性、一致性、断绝性和长期性。事务的ACID属性主要靠数据库办理系统中的两个机制实现,一个是并发节制,另一个是Logging/Recovery机制。

并发节制 并发节制 传统基于磁盘的DBMS大部门是接纳基于锁(Lock)的灰心并发节制,即事务在会见数据时先加锁,用完后再举行解锁,其他事务在会见数据时假如存在冲突则需要等候拥有锁的事务释放锁。传统DBMS一般会在内存中维护一个单独数据布局——Lock Table来存放所有的锁,由Lock Manager模块举行统一办理,这样在内存中锁缓和冲区中的数据是分隔存放和办理的。事务在会见数据时先向Lock Manager申请数据所对应的锁,然后再会见数据;执行竣事后通过Lock Manager把锁释放,Lock Manager可以或许包管所有事务申请和释放锁都是遵循严格的两阶段封锁协议(strict 2 phase locking protocol)。

同时,并发节制机制所带来的开销与用户的实际业务处置惩罚没有直接关系,是用于包管事务一致性和断绝性的分外开销。内存数据库在会见数据时也需要加锁,但和基于磁盘的DBMS差别,锁和数据在内存中是存放在一起的,凡是是将锁信息生存在数据记载Header中。为什么基于磁盘的DBMS要单独将锁信息放在Lock Table中,而内存数据库就可以把锁信息和数据存放在一起呢?因为在基于磁盘的DBMS中,数据块是有可能被系统从内存缓冲区中替换到磁盘上,假如锁信息和数据放在一起,一旦数据块被替换出去,Lock Manager和所有事务都无法得到关于数据的锁信息。所以说对于传统基于磁盘的DBMS来讲,锁要单独维护在内存中,且需要始终保持在内存中,不能被替换出去。

而对于内存数据库来说,不存在这样的场景。实际上,数据库办理系统中有两种锁机制,别离被称为Lock和Latch,目的都是为了掩护数据的一致性不被并发会见所粉碎。

Lock机制是对数据库逻辑内容的掩护,一般来说拥有连续时间长,凡是是事务执行的整个历程;而且Lock机制要支持事务的回滚以打消事务对数据修改。而Latch机制是为了包管内存中特定的数据布局不会因为并发会见而导致错误,好比在多线程编程时有一个共享行列产生插入、删除等操作时,需要Latch包管操作历程中的行列不受其他线程的滋扰。

Latch的保持时长与操作有关,本次操作做完就竣事,同时也不需要支持对数据修改的回滚。所以传统DBMS假如要对缓冲区中的一个Page做操作则需要加Latch;假如是修改数据库的内容则需要加Lock,单独放在Lock Table维护和办理。

下图是对Lock和Latch的一个简朴对比。Lock和Latch特征对比 Logging 和 Recovery 数据库办理系统中,Logging和Recovery机制是日志来包管事务的原子性和长期性的方式。

原子性意味着一个事务中的所有操作必需同时乐成或者打消,在执行一半做不下去时,可以根据日志举行回滚;长期性意味着数据假如丢失,可以按照日志来举行恢复。在传统DBMS的Logging和Recovery中,最重要的观点是WAL(Write-Ahead Log)——预写式日志。WAL是指系统中所有更新操作都有对应的日志,而在日志没有落盘前,对数据的修改不允许落盘。

系统中每条日志都有一个LSN号(Log Sequence Number),所有的LSN号单调递增,日志落盘的历程是向磁盘的持续写(顺序写)。但假如系统严格根据一条日志对应一条操作,日志落盘后顿时将操作对数据的更新成果落盘,那么系统机能会受到很大影响。所以,大大都的DBMS会接纳 Steal + No Force的缓冲区办理计谋。

Steal是指DBMS可以将未提交事务的更新刷到磁盘,不必等事务提交时再把更新刷到磁盘,提高了系统刷盘的机动性和机能;假如在事务未提交时产生crash,由于更新可能已经写到磁盘,这时就需要通过对日志的undo操作举行回滚。No Force是指在事务已经提交后,对数据的更新可以依然存放在内存缓冲区中不写入磁盘,在归并其他事务的更新后再一次性写入磁盘,为系统提供优化空间。

但No Force可能带来的风险是:假如事务已经乐成提交但更新没有写到磁盘,此时呈现crash,则仍然在内存中的数据更新就会丢失,需要按照已经写到磁盘的日志(事务乐成提交的前提是其所有日志都必需已经落盘)举行redo操作。有了WAL和Steal + No Force机制后,就可以给基于磁盘的DBMS提供最大的机动性,来优化磁盘I/O。但对于内存数据库而言,所有的数据放在内存里,是否还需要这个机制呢?可以明确的一点是,内存数据库还是需要Logging的,但和基于磁盘的DBMS有所区别,在日志中只记录redo操作所需的信息,不记录undo所需的信息。大家可以想一下这是为什么?另一方面,内存数据库在Logging历程中不记载关于索引的更新,只记载对于基础表的更新,那Logging历程中所需写盘的内容就少了许多。

而在内存数据库呈现妨碍需要恢复时,首先从磁盘上生存的查抄点(Check Point)数据和日志中恢复基础表,然后在内存中从头构造索引。— 面向磁盘的DBMS机能开销 — 2008年,SIGMOD的一篇论文对面向磁盘的数据库机能开销做了阐发,把整个数据库系统的开销做了划分。

阐发发明:假设一次业务处置惩罚的总开销是100%,实际上只有7%不到的资源是在真正处置惩罚业务逻辑;34%用于缓冲区办理如缓冲区的加载替换、地址转化等;14%处置惩罚Latching;16%处置惩罚Locking;然后12%处置惩罚Logging;最后16%用于对B树索引的处置惩罚。也就是说,呆板资源跑满负荷以后,真正用于处置惩罚业务逻辑的只有7%。

磁盘数据库系统机能开销 那么是否可以将开销大的部门去掉,来提高业务逻辑的资源占比呢?假如数据库是单用户的,没有并发竞争冲突,那么可以省去Locking和Latching等方面的开销。汗青上也有一些单线程的解决方案,比方将数据库分成多个Partition,每个Partition由一个线程处置惩罚等。但这样的方案具有明明缺点:每个Partition是串行处置惩罚,如果有一个长的事务在执行,串行处置惩罚将导致后续事务全部被阻塞,直到该事务竣事。

并且面向磁盘的系统在举行大范围事务处置惩罚时瓶颈是磁盘I/O,假如单线程执行,在从磁盘读取数据时CPU将处于空闲状态。但对于内存数据库来说,所有数据存储在内存,磁盘I/O不是系统主要瓶颈,因此使用的技能与之前有了很大的不同。固然技能在成长历程中也履历了各类各样的实验,某些技能的成长不适合于现实配景,逐步就被人健忘了。

可以看到,基于磁盘的数据库办理系统做了许多分外的办理事情,这些事情虽然不处置惩罚业务逻辑,但在包管业务逻辑正确性上不行或缺。对于内存数据库而言,面对的问题是应该做哪些优化来获得最优的机能。和基于磁盘的系统比拟,内存数据库主存储是内存,但依然需要磁盘来做Check Point和Logging,妨碍时要靠磁盘上的查抄点数据和日志来恢复整个内存数据库。

—内存数据库技能汗青成长 — 内存数据库的成长大抵可以分成三个阶段:1984年到1994年的10年;1994年到2005年的10年;2005年以后到此刻。第一个阶段呈现了内存相关的处置惩罚技能;第二阶段呈现了一些内存数据库系统;第三个阶段就是我们此刻面对的场景。

1984年 - 1994年 1984年 - 1994年 在1984年到1994年间,学术界针对内存数据办理提出了许多假设,好比内存缓冲区可以放进全部数据,可以接纳组提交和快速提交优化技能等。同时也提出了面向内存的数据会见方法,不再像基于磁盘的DBMS一样接纳Page ID + Offset方式举行会见,而是在所有数据布局中都直接接纳内存地址。另有面向内存的T-tree索引布局以及对系统按功效分成多个处置惩罚引擎,有的专门干事务处置惩罚,有的专门做恢复,相当于有两个核,一个专门卖力事务处置惩罚,另一个卖力日志处置惩罚。别的另有和Partition相关的主存数据库,把数据库分成许多个Partition,每个Partition对应一个核(或节点),进程间没有竞争。

可以看到,这个期间的数据库技能成长已经在思量假如数据全部放在内存,可以接纳哪些技能。但受限于其时的硬件条件,这些技能并没有获得大范围应用。

1994年 - 2005年 1994年 - 2005年 1994年到2005年间呈现了一些贸易内存数据库系统,好比贝尔尝试室研发的Dali、Oracle Times Ten的前身Smallbase等。同时,也呈现了一些面向多核的优化系统如P*-Time(此刻是SAP-HANA事务处置惩罚引擎)。

其时也有一些Lock-free的实现技能被应用于内存数据库系统,即无锁的编程技能和数据布局。前两阶段小结 前两阶段小结 前两个阶段的技能大抵可以分成这样几类: 1、解决Buffer Pool的In-Direction会见:把间接会见替换掉,换成直接的内存地址会见;索引的叶子节点不再放Page ID 和Offset,而直接是内存地址。2、Data Partition:切分数据,不做并发会见节制的一类技能。

3、Lock-free和Cache-Conscious:相较于面向磁盘的数据库办理系统把一个索引节点存储在一个数据块中,内存数据库中一个索引节点是一个或几个Cache Line的长度。4、粗粒度的锁:一次锁一张表或一个Partition,而不是一笔记录,但这种技能此刻使用较少,因为多核场景会见竞争猛烈,粗粒度锁可能导致并发水平降低。

(今朝使用较少) 5、Functional Partition:把系统根据功效举行切分,每一个线程卖力特定的功效等。(今朝使用较少) DBMS汗青技能总结 — 数据库系统的现代化成长 — 在此刻的情况中,硬件条件根基有三个特点:1. 内存大而自制;2. 多核CPU(从主频晋升转变到内核数的晋升);3. Multi-Socket即多核多CPU,意味着处置惩罚的并发水平可以越来越高。这些都是数据库系统研发在当下所面对的环境。

现代硬件情况 对于 内存数据库而言,CPU和磁盘I/O不再是主要瓶颈,因此优化技能今朝主要从以下角度来思量: 去掉传统的缓冲区机制:传统的缓冲区机制在内存数据库中并不合用,锁和数据不需要再分两个处所存储,但仍然需要并发节制,需要接纳与传统基于锁的灰心并发节制差别的并发节制计谋。尽量减少运行时开销:磁盘I/O不再是瓶颈,新的瓶颈在于计较机能和功效挪用等方面,需要提高运行时机能。

接纳编译执行方式:传统数据库多接纳火山模型执行引擎,每一个Operator都被实现为一个迭代器,提供三个接口:Initial、Get-Next、Closed,从上往下依次挪用。这种执行引擎的挪用开销在基于磁盘的数据库办理系统中不占主要比重(磁盘I/O是最主要瓶颈),但在内存数据库里可能会组成瓶颈。假设要读取100万笔记录,就需要挪用100万次,机能会变得难以忍受,这就是内存数据库中大量接纳编译执行方式的原因。直接挪用编译后的呆板代码,不再需要运行时的解释和指针挪用,机能会有效晋升。

可扩展的高机能索引构建:虽然内存数据库不从磁盘读数据,但日志依然要写进磁盘,需要思量日志写速度跟不上的问题。可以减少写日志的内容,比方把undo信息去掉,只写redo信息;只写数据但不写索引更新。假如数据库系统瓦解,从磁盘上加载数据后,可以接纳并发的方式从头成立索引。只要基础表在,索引就可以重建,在内存中重建索引的速度也比力快。

去掉传统的缓冲区机制:传统的缓冲区机制在内存数据库中并不合用,锁和数据不需要再分两个处所存储,但仍然需要并发节制,需要接纳与传统基于锁的灰心并发节制差别的并发节制计谋。尽量减少运行时开销:磁盘I/O不再是瓶颈,新的瓶颈在于计较机能和功效挪用等方面,需要提高运行时机能。接纳编译执行方式:传统数据库多接纳火山模型执行引擎,每一个Operator都被实现为一个迭代器,提供三个接口:Initial、Get-Next、Closed,从上往下依次挪用。

这种执行引擎的挪用开销在基于磁盘的数据库办理系统中不占主要比重(磁盘I/O是最主要瓶颈),但在内存数据库里可能会组成瓶颈。假设要读取100万笔记录,就需要挪用100万次,机能会变得难以忍受,这就是内存数据库中大量接纳编译执行方式的原因。

直接挪用编译后的呆板代码,不再需要运行时的解释和指针挪用,机能会有效晋升。可扩展的高机能索引构建:虽然内存数据库不从磁盘读数据,但日志依然要写进磁盘,需要思量日志写速度跟不上的问题。可以减少写日志的内容,比方把undo信息去掉,只写redo信息;只写数据但不写索引更新。

亚搏手机在线登录入口

假如数据库系统瓦解,从磁盘上加载数据后,可以接纳并发的方式从头成立索引。只要基础表在,索引就可以重建,在内存中重建索引的速度也比力快。— 本文小结 — 本篇主要先容了基于磁盘的数据库办理系统与内存数据库办理系统在几个实现方面存在的主要异同,以及内存数据库从1984年开始到此刻的技能成长。

后面会继续分享关于内存数据库技能的成长,从数据组织、索引、并发节制、编译查询和长期化角度出发,先容并对比几款主流内存数据库产物的实现技能。注:本文部门质料来自于: 1. VLDB 2016集会上的现代主存数据库系统教程(Modern Main-Memory Database Systems Tutorial) 2. CMU(卡耐基梅隆大学)Andy Pavlo传授的高级数据库系统(Advanced Database Systems)课程 大数据开放尝试室由星环信息科技(上海)有限公司运营,专门致力于大数据技能的研究和流传。返回,检察更多。


本文关键词:亚搏,手机,在线,登录,入口,内存,数据库,解析,亚搏手机在线登录入口

本文来源:亚搏手机在线登录入口-www.xtfp2017.com