随笔分类 -  Database System

摘要:接着前面的,本节介绍剩下的索引信息管理和视图信息管理。3、(IndexMgr)索引信息管理IndexMgr随着系统启动而创建,如果系统已经有idxcat.tbl,说明事先已经创建过索引信息表,直接读取文件内容即可,否则需要创建一个新的索引信息表。表结构如下:indexNametableNamefie... 阅读全文
posted @ 2012-09-18 22:37 郝玉琨 阅读(503) 评论(0) 推荐(0)
摘要:续前节。2、(StatMgr)统计信息管理统计信息管理器主要维护了一个表的三种统计信息:表文件包含Block的个数,包含记录的条数,以及每个字段非重复记录数。图1 统计信息管理注:StatInfo中,每个字段的非重复记录数是一个经验估计值,大约是1 + (numRecs / 3)。如前面所说,统计信... 阅读全文
posted @ 2012-09-17 22:11 郝玉琨 阅读(699) 评论(0) 推荐(0)
摘要:前面介绍了SQL语句的解析,在开始介绍查询动作的实现之前,有必要先看下simpledb对元数据(Metadata)的管理。出去完整性的考虑,对应着代码,这里会把record和metadata放在一起介绍。以下,是metadata和record的类图:图1 metadata和record类图通过类图,可以看出,simpledb维护了四种元数据:表信息(包含字段信息),视图信息,索引信息和统计信息。这四种数据,有的会持久化到磁盘上,如:表信息,字段信息,视图信息,索引信息;有的则是在运行时内存中维护,如统计信息。图2 Metadata组成示意以下将分别对这四种信息的管理,逐一介绍。1、(Table 阅读全文
posted @ 2012-09-17 01:08 郝玉琨 阅读(842) 评论(0) 推荐(0)
摘要:在(1)里面提到,lexer作为一个工具,完成了对SQL字符串的切割,将语句转化成一个tokens数组。Parser完成了SQL解析的后序部分:使用一个lexer对象作为工具,切出tokens,然后解析语义,绑定相关的系统接口。在这里先要回顾下simpledb的支持的SQL的语法,这个影响了它在解析字符串时使用的方法。<Query> := SELECT <SelectList> FROM <TableList> [ WHERE <Predicate> ]<SelectList> := <Field> [ , <Sel 阅读全文
posted @ 2012-09-12 23:59 郝玉琨 阅读(1008) 评论(0) 推荐(0)
摘要:前面的几个部分,基本实现了数据的读写。对于数据库使用者来说,SQL(Structured Query Language)是访问数据库的窗口,这一节就来看下simpledb对SQL语句的解析。首先要说的是,simpledb实现了一个SQL-92的子集,具体支持的语法如下所示: 1: 2: <Query> := SELECT <SelectList> FROM <TableList> [ WHERE <Predicate> ] 3: <SelectList> := <Field> [ , <SelectList> 阅读全文
posted @ 2012-09-11 00:46 郝玉琨 阅读(1924) 评论(1) 推荐(0)
摘要:前面已经讲过了事务的并发管理和崩溃恢复整个事务管理,剩下了最后个点: 1、事务自己的缓冲管理 2、Transaction管理数据读写 > 事务自己的缓冲管理 Transaction下维护了一个BufferList,这个BufferList维护着事务当前pin着的缓冲片 图1 BufferList类图 维护一个Dictionary<Block,Buffer>对象buffers,保存当... 阅读全文
posted @ 2012-09-08 11:33 郝玉琨 阅读(526) 评论(0) 推荐(0)
摘要:2、恢复管理 2.1 日志的语义实现 前面在Log底层实现提到,Log只负责日志在字节粒度上的实现,并不知晓日志的语义信息。日志的语义信息由恢复管理器来实现。 图1 恢复管理器下日志记录类图 LogRecord作为一个抽象了,定义了所有日志记录的基本接口;系统提供了6种不同的日志类型{CHECKPOINT,START,COMMIT,ROLLBACK,SETINT,SETSTRING}。... 阅读全文
posted @ 2012-08-30 14:17 郝玉琨 阅读(640) 评论(0) 推荐(0)
摘要:在关系型数据库里面,每一项操作,都是要放在一个事务中完成。自顶向下看来,事务处在顶层的位置,事务统领了查询,统领了日志,统领了存储。 按照类似于软件工程中 喷泉模型 的思路,用层层迭代的方式,来看待关系型数据库管理系统从小到大各个组件的扩张,最初解决了无语义的字节存储,然后附加上日志的底层实现,再加上事务(包含了日志的语义信息处理),就得到了一个最小的系统。之后的查询,优化等都可以在这个最小系统... 阅读全文
posted @ 2012-08-27 14:56 郝玉琨 阅读(765) 评论(0) 推荐(0)
摘要:log的类图如下: 图 1 Log 类图 > BasicLogRecord 最基础的日志读写的类。提供方法读取一条日志记录。但是,这各类紧限于按次序,在Page内顺序读取一个int值或一个string值。BasicLogRecord类操作的粒度是字段,即在一个LogRecord内,读字段的值。因此,本类对象之外,需要有组件了解一条LogRecord中值的类型及个数,管理本类的操作。 成... 阅读全文
posted @ 2012-08-25 21:34 郝玉琨 阅读(812) 评论(0) 推荐(0)
摘要:几句闲话:08年还是大二的时候,在导师的建议下,读了布朗大学Edward Sciore教授做的一个教学RDBMS,叫simpledb,然后和同学一起照猫画虎实现一个C#版本的,当初只是为了了解RDBMS的实现原理。几年后,电面时几次被问到当初的这个小东西,发现自己竟然有好多细节忘记了。不由生出心思,再读一遍。或许,RDBMS不想以前那么火了,Nosql在大行其道,不过,想起在《Readings in database》里面有一篇论文叫《What goes around, comes around》,复习一些,还是会有些裨益吧。而且,simpledb麻雀虽小,五脏俱全,对于了解RDBMS的底层实 阅读全文
posted @ 2012-08-16 20:06 郝玉琨 阅读(3914) 评论(1) 推荐(0)
摘要:From http://duanple.blog.163.com/blog/static/709717672011330101333271/ thx:) Orz 一.google论文系列 1. google系列论文译序 2. The anatomy of a large-scale hypertextual Web search engine 3. 面向... 阅读全文
posted @ 2012-07-14 23:56 郝玉琨 阅读(564) 评论(0) 推荐(0)
摘要:D Log Manager WAL 提供恢复功能的基础,同时,对OLTP系统的性能有重大的影响,是系统中至关重要的一部分。 每条日志记录用LSN(Log Sequence Number)进行标识。LSN被专门设计,通过LSN可以迅速定位到指定的日志记录。LSN被设计为严格的升序,这对恢复来说,是个非常重要的特性。 Log Records 初始在内存中,在事务提交和checkpoint时,被flush到硬盘上。在系统崩溃时,有可能丢失未写入硬盘的日志。这不会引起什么问题,因为按照定义,这些日志记录必须反映为完成事务引起的数据库的改变。此外,WAL协议保证这样的日志记录不包含已存入数据库的改变的日 阅读全文
posted @ 2010-03-04 23:03 郝玉琨 阅读(407) 评论(0) 推荐(0)
摘要:A、Object Registry 主要思想:Object Registry中维护有一个table,此table为一个映射表(map),每种类型对应一个typecode(2-byte),位于每个对象之前。在从bytestream中提取对象的时候,先读取typecode,然后在Object Registry的map中找到对应的类型描述,用然后提取出一个指定类型的对象。 两大功能:1、从bytestream中重建对象; 2、复杂的对象处理;针对Singleton,一个类型只有一个对象(而Factory则是用类型去生成对个对象); 在object 与bytestream的转换过程中 marshall 阅读全文
posted @ 2010-03-03 22:31 郝玉琨 阅读(547) 评论(0) 推荐(0)
摘要:参考的是VLDB2005的这篇论文,做个标记把。/Files/YFYkuner/Concurrency_control_and_recovery_for_balanced_B-link_trees.pdf 阅读全文
posted @ 2009-12-21 20:36 郝玉琨 阅读(641) 评论(0) 推荐(0)