高级数据库典型技术

数据库作为计算机学科中一个比较重要的分支,也是一个对于程序员来说非常好的学习方向。平时我们用的最多的,同时也是接触最多的一定是增删改查语句,select,

update,delete等,当然,我不会拿这些再说一遍,这些都是老的掉渣的东西了。所以我们可以学习高级数据库中所以涉及的技术。换句话,其实就是抛开业务层的逻辑,从更加深层次的角度理解数据库。今天我主要提交3个技术点,

1.数据索引技术,典型的B+树索引系列

2.数据库故障恢复技术,我这里只提的是基于日志的恢复技术

3.数据库系统结构,讲讲时下流行的分布式数据库系统

数据库索引技术关系着数据的查询速度,当数据量比较小的时候,响应是没有问题,当数据库中拥有百万,千万级数据量的数据时,建立索引是必须的。传统的数据查询操作时在海量数据中一条条的查询,在磁盘块中逐个寻找效率当然不高,如果是连续存储的还算运气好,如果是物理上不连续的,那结果可想而知。所以在这里我们引入了一个名叫“index”索引概念的东西,他不保存真实的数据,索引其实是一个指向真实数据记录的地址指针,要查询的数据的时候,先找到此索引值,然后根据此索引值,找到真实记录地址,因为不保存真实数据,索引查询的速度比较快。首先我们说说顺序索引,顺序索引的定义是当数据文件的存储顺序是按某个索引键值的顺序排列时,称该文件为顺序文件,为顺序文件建立索引的时候,一般此索引的建立以某个索引键一致,比如说某ID建立的索引为顺序索引,顺序文件的索引可以采用二分查找方法能够很快定位到相应的索引记录。B+树索引是以平衡树的结构构建的索引,B+树凭借其特殊的结构设计,一直保持着一种比较高的查询效率,在我之前的文章中也都提到过了。最后说的是散列索引,散列索引是利用哈希函数将搜索键值,分别映射到M个记录搜索键值存储地址的桶中,这样可以利用哈希算法直接检索,我们都知道哈希算法,的速度是相当快的哦,但是同时此时的一个好的哈希算法就显得至关重要了,最好能将索引记录均匀地分布到各个桶中。

基于日志的恢复技术也是数据库容灾处理的一部分,这里的日志主要有3个,undo,redo,undo/redo三种。undo,从这个英文中我们也可大概知道他的意思是不要做,就是撤销操作的意思了,一般我们在操作未完全完成的情况下才会执行撤销动作,这样可以避免脏数据的诞生。undo的日志就是为了防止出现这个情况的。undo的日志记录结构为:

<T, X, V>

其中:T是更新数据的事务,X是T更新的数据元素,V是更新前的旧值,数据出错了就是拿这个值更新回去的,一个完整的undo日志记录如下:

<start T> //开启事务

<T, A, 10 >  //对数据A 进行了数据更改,把他的旧值记录下来

<T,B,10>  //对数据B进行了数据操作,把B的旧值也记录下来

<COMMIT T>  //事务执行成功,也记录

如果在commit 操作之前系统故障了,也就是<COMMIT T>没有写入记录中,也不知道数据操作到底对不对,日志统一从后往前逆序读取,首先遇到<T,B,10> ,将B更新到旧值10,然后又遇到<T,A,10> ,将A还原回到10,直到遇到<start T> ,说明事物恢复成功,又回到了事物的出发点日志恢复结束。undo日志的事务执行顺序为:

(1).写更新数据量元素的日志

(2).再写更新的数据元素

(3).最后写COMMIT,表明事务已经成功提交

但是在这里其实会暴露一个潜在的问题,此要求事务必须将所做的修改写到磁盘后才能提交事务,这无疑增加了I/O开销,实际上,我们可以将数据的修改操作暂缓写到磁盘上,等到缓冲区满时再写入磁盘,就可以节省很多I/O操作了,于是就有了redo日志的出现,redo日志的格式与undo日志略有区别:

(1).写更新数据量元素的日志

(2).再写COMMIT,表明事务已经成功提交

(3).最后写更新的数据元素

所以如果在2,3步骤直接出错,系统也当时值已经更新成功了,会重做操作的,<T, A, V>这里的V保存的就是新的值,用于重做操作时使用的,说明A,B的值可能延迟更长的时间才能写到磁盘中,如果这段时间系统出异常了,就redo操作,还有一种是undo/redo,模式相结合的,灵活性最强。所有的日志记录都要检查点的一个机制,检查点之前的记录都可以忽略不计了,每次都从新的检查点开始,检查点的2个标记为:

<START CKPT>

<END CKPT>

每次寻找到END CKPT,可以将上一个前的<START CKPT>的日志丢弃。

最后来看看近年来随着分布式系统的出现,也出现了分布式数据库的概念,分布式数据库数据库系统可以看做一系列的集中式数据库的联合,在逻辑上属于同一系统,物理上是分布式,不连续的。他们之间的唯一联系就是----网络。一个数据库的查询可以涉及多地的分布式数据查询,与之相应的还有分布式事务管理,这个比分布式查询更为复杂,网络因素将成为影响分布式查询时间的最大的影响因素,在传统的本地数据库中,计算机的CPU处理速度会是影响查询速度的最主要因素,与现在的分布式数据库是截然不同的,所以分布式数据库的设计能设置成本地访问的就不要搞成分布式的查询,一般90%的查询可以用在本地查询,真到了那10%就通过分布式查询的方式,而且分布式的查询,也应该选择离自己最近的一个分布式数据库中。分布式数据的设计方法有自底向上和自顶向下2种,这个我就不展开了,比较复杂。

时间: 2024-08-03 19:27:59

高级数据库典型技术的相关文章

常见数据库加密技术对比

数据库加密作为近年来兴起的数据库安防技术,已经被越来越多的人所重视.这种基于存储层加密的防护方式,不仅可以有效解决数据库明文存储引起的泄密风险,也可以防止来自内部或者外部的入侵及越权访问行为. 从技术手段上来看,现今数据库加密技术主要有三大类,分别是前置代理及加密网关方式.应用层加密方式以及后置代理方式.这三类技术各自的特点如何,彼此之间孰优孰劣,下文详尽介绍. 前置代理及加密网关技术 该技术思路是在数据库之前增加一道安全代理服务,对数据库访问的用户必须经过该安全代理服务,在此服务中实现如数据加

转:关于数据库压缩技术的Survey

原文来自于:http://outofmemory.cn/mysql/database-compression-tech 昨天给团队内的小伙伴做了一个关于数据库压缩技术的Survey,现将其中可以公开的部分分享出来.数据库压缩技术目前已经成为了各种数据库的标配技术,这里面包括三大商业数据库.各种专业的分新型数据库,也包括各种开源数据库和NoSQL数据库. 到了今天,数据库压缩技术的运用已经不单纯是为了节省存储成本,更多的时候,是为了提供更高的计算密度(比如容量受限的SSD),以及提供更高的查询性能

数据库访问技术之JDBC

在了解JDBC之前呢,我们可以先对ODBC做一个回顾,以便于更好的理解JDBC.看名字也知道这两个关系不一般,他们实现了同样的功能,为应用程序连接和操作数据库提供支持.所以,我们先从ODBC开始. ODBC ODBC(Open Database Connectivity)是开放数据库互连的简称,是一种使用SQL的应用程序接口.它是一系列的规范和对数据库访问的API.那么API+SQL就可以执行对数据库的操作.它是不依赖于DBMS的,即通过ODBC可以以相同的方式连接大部分数据库.它包括了应用程序

连接访问数据库的技术方法

几种数据库连接方式优缺点比较 访问接口 易用性 运行能力 可扩展性 技术层次 突出特点 ODBC 差 较高 差 底层 可进行底层控制 MFC ODBC 好 一般 高层 同用标准,应用广泛 MFC DAO 好 较高 一般 高层 访问JET性能最好 OLE DB 很难 高 好 底层 可访问非关系型数据库 ADO 最好 高 好 高层 可访问非关系型数据库,有多种编程接口 ODBC 是一种底层的访问技术,因此,ODBC API 可以是客户应用程序能从底层设置和控制数据库,完成一些高级数据库技术无法完成的

分布式高级数据库(怀念一下我得了及格的高级数据库)

高级数据库技术 (一)引言 数据库系统的发展起始于19世纪60年代,从IBM的层次模型IMS.网状模型.关系模型,发展到多数模型共存的(同构和异构及其混合的形式共存的现状).尤其是三位在数据库领域获得图灵奖的得主,查尔斯.巴赫曼,埃德加.科德和詹姆斯.格雷三人所对于数据库发展的贡献.尤其是科德在1970年发表的"大型共享数据库的关系数据模型"奠定了关系型数据库的基础.随着科学技术的发展,各个行业的需求对于数据库的要求产生了巨大的推动力,使得数据库和分布式技术.并行计算技术.人工智能等进

专业Oracle数据库恢复技术支持

数据库作为企业的核心,如果数据库因损坏无法正常运行,导致数据丢失,将给企业带来无法挽回的经济损坏.当您的数据库出现故障,又没有有效的备份之时,我们就是您的最后一道防线,尽最大可能帮您挽救数据库,减少损失.我们有几百套Oracle数据库恢复经历:版本从ORACLE 7.3.ORACLE 8/8I,ORACLE 9I.ORACLE 10G,ORACLE 11G和ORACLE 12C:平台有Linux.Windows.AIX.HP-UNIX.SOLARIS等:客户从西藏到海南,从黑龙江到贵州遍布中国所

Unix网络编程(六)高级I/O技术之复用技术 select

I/O复用技术 本文将讨论网络编程中的高级I/O复用技术,将从下面几个方面进行展开: a. 什么是复用技术呢? b. 什么情况下需要使用复用技术呢? c. I/O的复用技术的工作原理是什么? d. select, poll and epoll的实现机制,以及他们之间的区别. 下面我们以一个背景问题来开始: 包括在以前的文章中我们讨论的案例都是阻塞式的I/O包括(fgetc/getc, fgets/gets),即当输入条件未满足时进程会阻塞直到满足之后进行读取,但是这样导致的一个 问题是如果此时进

高级数据库及一步一步搭建versant数据库

总的来说,高级数据库课程分为分布式数据库和面向对象数据库两块.分布式数据库介绍了分布式数据库的方方面面,包括数据库系统的设计.查询处理优化.事务管理和恢复.并发控制.可靠性.安全性与目录管理等.面向对象数据库基本上回顾了OO的方方面面,只是结合数据库的背景进行详细分析,无特别之处.Project基本就是搞笑的,题目也不知道用了多少年从古至今(据说最早01年就开始用这个题目,不知真假但至少有六七年历史).而Versant数据库这个题目本身就是结合OO思想设计表结构,将表结构持久化到Versant数

ADO.NET数据库访问技术

ADO.net:数据库访问技术程序操作的数据都是变量或对象,这些东西都存在于内存中但是有很多的数据是存在数据库中的,数据库中的数据存在于硬盘上 作用:将数据库中的数据取到内存中来,可以让程序进行操作 将内存中的数据,写入到数据库中 1.using System.Data.SqlClient; //引用命名空间 2.建立 数据库连接类 string str = "server=.;database=Data0515;user=sa;pwd=123;";//连接字符串 SqlConnect