我们知道,数据是信息的载体——一种我们约定了如何解释的符号。在计算机系统中,最常见的应该是文本数据。我们用它记录配置信息,写日志,等等。而在应用程序中,按一定的数据结构来组织数据的方式叫做数据库管理系统(DBMS)。数据库就是把数据按照一定的规则,有效的组织存放,以提供更高效、更便捷的数据访问和处理。要理解数据库原理,并使用数据库,需要理解三点内容:1>数据库的数据组织的方式;2>数据库的逻辑架构及物理实现;3>数据库客户端的操作方法。也许,对于使用数据库来说,只需要掌握最后一点,即操作方法就可以了。但是,一个只能掌握具体操作,而无法理解领会为何要这么操作,及这些操作是为何操作的人,不过是个熟练的技术工。因为具体的操作,是一项技能,是“术”的层面的东西;而原理是“道”的层面的东西。一门技术,可能兴盛,也可能被淘汰,但原理是不会过时和被淘汰的。比如,8086处理器的指令,可以多数已经过时了,但是它的设计思想,确实永远不会过时的。

  先说说数据库的数据结构。我们日常所用的文本文件,是按字节顺序存储的。要找到一个文本中的某些特定的信息,必须通过文本流的方式,从头到尾一字节一字节的将文本扫描。这种效率,平时写写脚本,理解练习I/O原理是可以的。但实际应用中,显然是不现实的。比如腾讯的几亿人的QQ号的数据,要是使用纯文本来存储,每个人登录时,岂不是都要将整个文件扫描一次?

  在数据库中,用到的数据结构是——B-Tree。要了解B-Tree,我们先来了解一些二叉查找树(Binary Search Tree)。二叉查找树是一种查找高效的数据结构。二叉查找树有三个特点:1>每个节点最多只有两个子树;2>左子树的值总是小于父节点,右子树的值总是大于父节点;3>在二叉查找树中找到一个数据,平均只需要logN次比较。

                                         图1——二叉查找树

  但是二叉查找树因为每一层最多只能有两个节点,大量的数据存放会导致层次太深。而数据的实际存放是通过文件系统存储在硬盘上的。我们知道,硬盘这个I/O外设的访问速度和内存的速度比起来,差的可是N多数量级啊。所以,访问硬盘的次数越少越好。而二叉查找树的过深的层次结构导致访问硬盘的次数剧增。所以,才有了B-Tree这个数据结构,用以组织数据库中的数据。B-Tree也有三个特点:1>一个节点可以容纳多个值;2>除非本层数据已经填满,否则不会开辟新的层;3>子节点中的值,与父节点中的值,有严格的大小对应关系。如下图:

                                       图2——B-Tree

  因此,当使用B-Tree时,只需要2层就可以实现1万的数据存储。而使用二叉查找树则需要10层。同时,B-Tree具备二叉查找树的高效查找特性。当进行查找操作时,使用B树只需2次读取硬盘进行比较就可以了。而使用二叉查找树则需要10次读取硬盘进行比较。所以,B树的效率更高。

  说了数据库的数据结构,在说说后面两个内容。以用得比较广泛的LAMP开源轻架构中的MySQL为例,说说MySQL的逻辑结构。MySQL由Client和Server构成,是典型的C/S架构。1>在实际应用中,充当Client通常是第三方应用(Python, PHP, Perl等)中的MySQL驱动。2>与Client通信的部分叫做连接池(connection pool),主要负责“Client”与Server的连接以及验证等。以本地socket通信和TCP/IP通信实现连接与验证。3>然后是核心层,负责提供SQL接口和查询缓存,以及查询的优化和部分内部函数的执行。4>再后是存储引擎层,真正负责数据的存储和提取。有多种存储引擎,提供不同的功能。5>最后是数据存储层,真正把数据存储在文件系统中。

  MySQL快速入门的使用教程可以参考《21分钟MySQL入门教程》 。

转载请注明地址:<http://www.cnblogs.com/qiuyi116/p/4349233.html>

MySQL数据库原理的更多相关文章

  1. 【转】MySQL数据库原理

    原文地址:http://www.cnblogs.com/qiuyi116/p/4349233.html 我们知道,数据是信息的载体——一种我们约定了如何解释的符号.在计算机系统中,最常见的应该是文本数 ...

  2. zabbix利用自带的模板监控mysql数据库

    zabbix利用自带的模板监控mysql数据库 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有些东西你不会的时候觉得它特别难,但是当你去做的时候就发现如此的简单~zabbix功能 ...

  3. Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复

    Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...

  4. 使用Memcache缓存mysql数据库操作的原理和缓存过程浅析

    转载自脚本之家 http://www.jb51.net/article/51831.htm  作者:忙碌的松鼠 对于大型网站如facebook,ebay等网站,如果没有Memcache做为中间缓存层, ...

  5. 烂泥:学习mysql数据库主从同步复制原理

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对 ...

  6. MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

    文/何登成 导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...

  7. MySQL执行原理,逻辑分层、更改数据库处理引擎

    MySQL执行原理,逻辑分层.更改数据库处理引擎 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 用了那么长时间的MySQL,sql语句相信早已烂熟于心,于是,我就试着去了解它的执行原理 ...

  8. mysql数据库主从同步复制原理

    MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQ ...

  9. 重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化

    重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化 一:Mysql原理与慢查询 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能 ...

随机推荐

  1. MyBatis Oracle批量更新

    <update id="updateProductSerialNo" parameterType="java.util.List"> <for ...

  2. Go语言简介

    Go语言简介 - Go语言是由Google开发的一个开源项目,目的之一为了提高开发人员的编程效率. Go语言简介 Go语言是由Google开发的一个开源项目,目的之一为了提高开发人员的编程效率. Go ...

  3. myBatis性能优化【转】

    官方doc文档 http://www.mybatis.org/mybatis-3/configuration.html#settings 最近测试发现个myBatis 有个比较严重的性能问题, 描述如 ...

  4. Spring Autowire自动装配

    在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间和精力用于创建和维护系统中的< ...

  5. win 8(win 7)批处理设置IP

    适合所有经常更改IP的朋友,里面的内容可用可用根据自己的需要随意修改 @rem 根据自己的需要修改带 (@rem/注释)的地方,修改完毕后直接将本文件后缀名.txt改为.bat即可使用 @rem 运行 ...

  6. SQL Server查询数据库中所有的表名及行数

    SELECT a.name, b.rows FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE (a.type = ...

  7. 打造强大的BaseModel(2):让Model实现自动映射,将字典转化成Model

    打造强大的BaseModel(1):让Model自我描述 这篇文章将讲述Model一项更高级也最常用的功能,让Model实现自动映射–将字典转化成Model(所有代码全由Swift实现) 将JSON转 ...

  8. Es6 之for of

    能工摹形,巧匠窃意. -- 毕加索 2016-10-10 <!DOCTYPE HTML> <html> <head> <script src="tr ...

  9. Oracle+FluentData+MVC4+EasyUI开发权限管理系统之开篇

    在园子里有很多EF+MVC+EasyUI的框架实在是太多了,经过在一段时间的学习高手写的思路,但是都是针对Sql数据的,但是今年我当上研发组组长的第一个任务就是编写一个通用平台框架,一刚开始想把学习过 ...

  10. jQuery Validate验证框架使用

    jQuery Validate使用前的准备,需要下载相应js包括:1.jquery.validate.min.js.2.additional-methods.min.js. 当然必不可少的js jQu ...