数据库技术

database manage system
摘要: 一些不得不记住的数据库大牛阅读全文
posted @ 2011-03-30 23:21 MrDB 阅读(1360) | 评论 (5) 编辑
摘要: 一些分布式计算理论方面的小结阅读全文
posted @ 2010-09-07 21:40 MrDB 阅读(1563) | 评论 (1) 编辑
摘要: 查询处理及优化是关系数据库得以流行的根本原因,也是关系数据库系统最核心的技术之一。SQLite的查询处理模块非常的精致,而且很容易移植到不支持SQL的存储引擎,Berkeley DB最新的版本已经将其完整的移植过来。本文将简要的讨论一下SQLite的查询处理及优化。阅读全文
posted @ 2010-06-23 15:44 MrDB 阅读(3284) | 评论 (7) 编辑
摘要: Lemon是一个LALR(1)文法分析器生成工具。虽然它是SQLite作者针对SQLite写的一个分析器生成工具,但是它与bison和yacc类似,是一个可以独立于SQLite使用的开源的分析器生成工具。而且它使用与yacc(bison)不同的语法规则,可以减少编程时出现错误的机会。Lemon比yacc和bison更精致、更快,而且是可重入的,也是线程安全的。本文简要的整理了一下Lemon的使用以及SQLite相应的语法规则。阅读全文
posted @ 2010-03-23 20:47 MrDB 阅读(2820) | 评论 (1) 编辑
摘要: 有一些日子没有仔细关注SQLite了,今天打开其主页,发现其最新的版本已经是3.6.22了,更让我惊喜的是它的用户越来越多,而且邮件列表的关注者也越来越多,突然觉得自己已经太old了。惊喜的同时,不得不聊上几句了。阅读全文
posted @ 2010-01-27 19:32 MrDB 阅读(4199) | 评论 (20) 编辑
摘要: 分区是数据库管理系统实现并行处理的一种重要手段。MySQL从5.1开始,开始支持分区这一神奇的功能。但是,目前,MySQL做得还不够多(相对于Oracle),还处于开始阶段,查询优化没有充分利用分区带来的并行优势;不过,它正在努力,有理由相信它能够做好。早在关系数据库出现初期,并行数据库就随之而生,以Teradata为代表的商业化产品已经得到市场的广泛认可,而且也是数据库系统发展的方向。2003年,MySQL从Ericsson公司取得NDB存储引擎,从此,开始了并行数据库之路。 分区并不等于并行数据库。但是,通过分区,能够为数据库管理系统带来某些并行特性,比如并行I/O,并行查询。也许将并行数据库与NDB Cluster一起讨论会更好。但是,分区与并行本来就有一种天然的联系。了解并行数据库的基本概念,才能真正理解分区;同样,理解分区,又会加深对并行数据库的理解。So,enjoy it。阅读全文
posted @ 2009-12-24 21:36 MrDB 阅读(2837) | 评论 (5) 编辑
摘要: 复制(replication)是分布式数据库系统重要的特征之一,几乎所有的现代数据库管理系统都不同程度的支持复制。复制带来的好处很明显,数据分布式存储,随之而来的其它一系列优点:负载均衡,高可用性,高性能,容错等等。但是,另一方面,它增加了系统管理的复杂性,尤其是更新的开销,这是数据分布无法避免的。不管怎样,复制都是建立一个高性能、高可用性的分布式数据库平台的起点。所以,享受它吧。阅读全文
posted @ 2009-12-19 11:33 MrDB 阅读(3127) | 评论 (11) 编辑
摘要: 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为 4K,并存储100条记录。如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页面在磁盘上随机分布,需要进行10^4次I/O,假设磁盘每次I/O时间为10ms(忽略数据传输时间),则总共需要100s(但实际上要好很多很多)。如果对之建立B-Tree索引,则只需要进行log100(10^6)=3次页面读取,最坏情况下耗时30ms。这就是索引带来的效果,很多时候,当你的应用程序进行SQL查询速度很慢时,应该想想是否可以建索引。阅读全文
posted @ 2009-10-28 20:24 MrDB 阅读(2876) | 评论 (4) 编辑
摘要: 最早接触的MySQL是在三年前,那时候MySQL还是4.x版本,很多功能都不支持,比如,存储过程,视图,触发器,更别说分布式事务等复杂特性了。但从5.0(2005年10月)开始,MySQL渐渐步入企业级数据库的行列了;复制、集群、分区、分布式事务,这些企业级的特性,使得现在的MySQL,完全可以应用于企业级应用环境(很多互联网公司都用其作为数据库服务器,尽管节约成本是一个因素,但是没有强大功能作后盾,则是不可想象的)。虽然,MySQL还有很多不足,比如,复制、分区的支持都十分有限、查询优化仍需要改进,但是MySQL已经是一个足够好的DBMS了,更何况它是 opensource的。这段时间没有事,出于好奇,略微的研究了一下MySQL,积累了一些资料,欲总结出来。这些资料打算分为两部分,上部主要讨论 MySQL的优化,其中主要参考了《MySQL Manual》和《High Performance MySQL》,如果有时间,以后在下部分析一下MySQL的源码。如果你是MySQL高手,希望你不吝赐教;如果你是新手,希望对你有用。阅读全文
posted @ 2009-10-18 21:52 MrDB 阅读(3108) | 评论 (5) 编辑
摘要: 索引与order by的实现阅读全文
posted @ 2009-09-16 20:11 MrDB 阅读(1189) | 评论 (0) 编辑
摘要: SQLite的页面格式浅析阅读全文
posted @ 2009-06-14 16:28 MrDB 阅读(2186) | 评论 (4) 编辑
摘要: SQLite作为嵌入式数据库,通常针对的应用的数据量相对于通常DBMS的数据量是较小的。所以它的存储模型设计得非常简单,总的来说,SQLite把一个数据文件分成若干大小相等的页面,然后以B树的形式来组织这些页面。而对于大型的数据库管理系统,比如Oracle,或者DM ,存储模型要复杂得多。就拿Oracle来说吧,它对数据文件不仅从物理进行分块,而且从逻辑上进行分段,盘区和页的一个层次划分,DM也一样。不管怎么说,数据库文件要存储大量的数据,为了更好管理,查询和操作数据文件,DBMS不得不从物理上、逻辑上对数据文件的数据进行复杂的组织。阅读全文
posted @ 2009-06-01 21:12 MrDB 阅读(2486) | 评论 (2) 编辑
摘要: oracle的number数据类型阅读全文
posted @ 2009-06-01 11:12 MrDB 阅读(1235) | 评论 (0) 编辑
摘要: 虚拟机技术在现在是一个非常热的技术,它的历史也很悠久。最早的虚拟机可追溯到IBM的VM/370,到上个世纪90年代,在计算机程序设计语言领域又出现一件革命性的事情——Java语言的出现,它与c++最大的不同在于它必须在Java虚拟机上运行。Java虚拟机掀起了虚拟机技术的热潮,随后,Microsoft也不甘落后,雄心勃勃的推出了.Net平台。由于在这里主要讨论SQLite的虚拟机,不打算对这些做过多评论,但是作为对比,我会先对Java虚拟机作一个概述。阅读全文
posted @ 2009-03-18 18:59 MrDB 阅读(4338) | 评论 (6) 编辑
摘要: SQLite封锁机制的实现需要底层文件系统的支持,不管是Linux,还是Windows,都提供了文件锁的机制,而这为SQLite提供了必要的支持。本节就来谈谈SQLite使用到的文件锁。阅读全文
posted @ 2009-03-10 21:54 MrDB 阅读(3760) | 评论 (4) 编辑
摘要: 本节主要谈谈SQLite的锁机制,SQLite是基于锁来实现并发控制的,所以本节的内容实际上是属于事务处理范畴,但是SQLite的锁机制实现非常的简单而巧妙,所以想在这里单独讨论一下。如果真正理解了它,对整个事务的实现也就差不多理解了。阅读全文
posted @ 2009-03-01 12:32 MrDB 阅读(3603) | 评论 (2) 编辑
摘要: SQLite Version3.3.6源代码文件结构阅读全文
posted @ 2009-02-26 16:18 MrDB 阅读(3820) | 评论 (6) 编辑
摘要: 由于内容较多,所以断续没有写完的内容。阅读全文
posted @ 2009-02-26 14:53 MrDB 阅读(2504) | 评论 (2) 编辑
摘要: 个人认为pager层是SQLite实现最为核心的模块,它具有四大功能:I/O,页面缓存,并发控制和日志恢复。而这些功能不仅是上层Btree的基础,而且对系统的性能和健壮性有关至关重要的影响。其中并发控制和日志恢复是事务处理实现的基础。SQLite并发控制的机制非常简单——封锁机制;别外,它的查询优化机制也非常简单——基于索引。这一切使得整个SQLite的实现变得简单,SQLite变得很小,运行速度也非常快,所以,特别适合嵌入式设备。好了,接下来讨论事务的剩余部分。阅读全文
posted @ 2009-02-26 14:16 MrDB 阅读(4215) | 评论 (3) 编辑
摘要: 从本章开始,将对SQLite的每个模块进行讨论。讨论的顺序按照我阅读SQLite的顺序来进行,由于项目的需要,以及时间关系,不能给出一个完整的计划,但是我会先讨论我认为比较重要的内容。本节讨论SQLite的事务处理技术,事务处理是DBMS中最关键的技术,对SQLite也一样,它涉及到并发控制,以及故障恢复,由于内容较多,分为两节。好了,下面进入正题。阅读全文
posted @ 2009-02-26 10:45 MrDB 阅读(4337) | 评论 (8) 编辑
摘要: 本节是前一节内容的后续部分,这两节都是从全局的角度SQLite内核各个模块的设计和功能。只有从全局上把握SQLite,才会更容易的理解 SQLite的实现。SQLite采用了层次化,模块化的设计,而这些使得它的可扩展性和可移植性非常强。而且SQLite的架构与通用DBMS的结构差别不是很大,所以它对于理解通用DBMS具有重要意义。好了,下面我们开始讨论SQLite剩余的两部分:Back-End(后端)和 Compiler(编译器)。阅读全文
posted @ 2009-02-17 21:12 MrDB 阅读(4829) | 评论 (14) 编辑
摘要: 从本章开始,我们开始进入SQLite的内核。为了能更好的理解SQLite,我先从总的结构上讨论一下内核,从全局把握SQLite很重要。SQLite的内核实现不是很难,但是也不是很简单。总的来说分为三个部分,本章主要讨论虚拟机(Virtual Machine),但是这里只是从原理上概述,不会太多的涉及实际代码。但是概述完内核之后会仔细讨论源代码的。好了,下面我们来讨论虚拟机(VM)。阅读全文
posted @ 2009-02-15 16:55 MrDB 阅读(6257) | 评论 (8) 编辑
摘要: 本节讨论事务,事务是DBMS最核心的技术之一.在计算机科学史上,有三位科学家因在数据库领域的成就而获ACM图灵奖,而其中之一Jim Gray(曾任职微软)就是因为在事务处理方面的成就而获得这一殊荣,正是因为他,才使得OLTP系统在随后直到今天大行其道.关于事务处理技术,涉及到很多,随便就能写一本书.在这里我只讨论SQLite事务实现的一些原理,SQLite的事务实现与大型通用的DBMS相比,其实现比较简单.这些内容可能比较偏于理论,但却不难,也是理解其它内容的基础.好了,下面开始第二节---事务.阅读全文
posted @ 2009-02-14 21:43 MrDB 阅读(5840) | 评论 (4) 编辑
摘要: SQLite入门与分析---设计与概念阅读全文
posted @ 2009-02-13 22:43 MrDB 阅读(9383) | 评论 (12) 编辑
摘要: SQLite分析---简介阅读全文
posted @ 2009-02-12 21:27 MrDB 阅读(25815) | 评论 (29) 编辑
摘要: sqlite-3.6.10的vs2005 编译错误阅读全文
posted @ 2009-02-11 18:35 MrDB 阅读(1540) | 评论 (0) 编辑