码迷,mamicode.com
首页 > 数据库 > 详细

Mysql及数据库的基础概念

时间:2017-02-11 14:56:06      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:mysql及数据库的基础概念

DBMS:数据库管理系统

  1. 层次模型

  2. 网状模型

  3. 关系模型


RDBMS:关系型数据库管理系统


文件存储:数据的冗余和不一致性难以解决

      当数据量很大时,文件存储的访问很困难

      当数据在不同的文件时,可能会造成数据的格式不一致,及数据太过于分散造成数据孤立

      数据的完整性问题(如两个银行之间转钱过程中出现故障,要保证总额一致)

      并发访问异常(如多人同时访问一个文件时,一个人在进行修改操作,其他人就不能访问)

      原子性问题(数据从一个稳定状态转移到另一个状态)

      安全性也得不到保障


    

1.表示层:文件或者表


2.逻辑层:文件系统或者存储引擎

  负责将底层的数据块抽象为文件供用户查看;而在存储数据时要靠文件系统将数据解构为物理层的数据(即完成从表示层到物理层的映射)


3.物理层:数据块,元数据


存储引擎:可以将文件系统理解文存储引擎,将不同的格式的数据转换为表示层的文件,还能将文件存储为物理数据。这两个过程的完成都要由存储引擎来完成



关系:可以将关系理解为一张表


属性:表中每一个列描述一个属性


实体:表中的每一行为一个实体(记录)


而整个表就是同一类实体的集合


E-R关系模型(即实体关系模型):将一个表拆分为多个表(实体),降低数据的冗余度


能够实现存储在关系型数据库中的关系模型有四种:

关系模型(结构化的数据模型):它的每个字段都是有相同属性的,如第一列为Name,第二列为Passwd

      1.关系模型:靠一张二维表存储数据,

      2.实体关系型:将表拆分成多个不同的实体,让实体之间通过不同的约束建立联系

      3.对象关系型模型:基于对象的数据类型

      如:将一个很大的数据(如图片)存储在数据管理系统的某个空间上,并在表中用一个指针指向这个数据的存储地址,将其基于对象进行管理

    

      4.半结构化数据模型:在同一个表中每一行表示的数据可能不一样;如

      Name:Age:Gender

      Name:UID:Birthdate

半结构化数据模型:在存储时既要把数据存储下来还要把数据定义的结构存储下来,以XML(扩展标记语言)格式进行存储


<name>Jerry</name>

 <age>50</age>

 gender:


而现在大多数的商业或者开源的关系型数据管理系统都能有效的处理以上四种数据模型


关系:代数运算(如求交集、并集、补集等等)


约束:如填入一个230的年龄数据库必须要能检测出来

   域约束:数据类型约束,如必须填入int,填入char错误

   外键约束:引用完整性约束。一个表中的字段必须与另一个表中的字段相同并且其值要一一对应

   主键约束:某字段(或多个字段组合)能唯一标识此行的实体

  注:任意两个实体在主键上不能出现相同值,并且不能为空

   如/etc/passwd 中的uid不同则可以作为主键、Name不同也可以作为主键

   唯一性约束:没一行的某字段都不允许出现相同的值,可以为空,且可以有多个


  注:所以一个表中只能有一个主键约束,但可以有多个唯一性约束

  

   检查性约束:如age<100,age>0

  注:MySQL对检查性约束支持不强,但SQL—Server和Oracle支持较好

数据库语言:


SQL(Structure Query Language):结构化查询语言

DML:数据操作语言(增、删、查、改)insert、delete、select、update


DDL:数据定义语言

  定义RDB(数据库对象):库、表、索引、视图、用户。存储过程、存储函数、触发器、事件调度器

  Crete、Drop、Alter


DCL:数据控制语言,用来定义数据库中用户的访问权限


查询管理器功能:负责接收用户的查询、理解用户查询、并将用户的查询转换为对应的存储管理器可以理解的语言、并且要能够将数据在磁盘上存储或者删除


查询管理器组件:

DML解释器

DDL解释器

查询执行引擎


存储管理器组件:

权限及完整性管理器

事务管理器(保证事务的完整性、原子性等)

文件管理器

缓冲区管理器(数据查询存储要先将数据缓存再内存中,缓冲区管理器用来管理缓存空间,如缓存哪些数据)



MySQL:单进程多线程模型

    一般来说MySQL会为每个用户的请求生成一个线程进行请求的响应,意味着一个用户的所有操作(增、删、查、改等)都在同一个线程中完成

    

MySQL的线程分为:守护线程、应用线程


注:通常来说每个查询请求都要消耗大量的内存(如一个大的查询可能要涉及到1G的数据量都有可能,而在32位系统上一个进程最多只能使用2.7G的内存),所以MySQL的并发能力并不是想象中的那么大。所以在一个集群中数据库服务器可能会是整个系统中最慢的一个节点,因此要尽量避免与数据库的交互操作



那么如何避免与数据库的交互或者提高数据库服务器的性能?


1.将第一次查询的结果保存在缓存服务器中(varnish、memcache),当以后有相同的查询请求时直接在缓存服务器中找


2.线程复用:如DisCuz论坛同一个用户可能会每隔一段时间发一个帖子,而每次发帖对数据库服务器来说都是一个新的请求,每次都要创建删除线程太麻烦,可以将线程实现多次利用


3.使用性能好的服务器且OS为64位


且MySQL对SMP(对称多处理器)架构的cpu支持很差,MySQL可以将多个查询在不同CPU上处理,但不能讲一个大的查询分开在多个cpu上同时运行,即一个单独语句只能在一个cpu上运行,这是MySQL不如orcale的一个很重要的原因(即扩展性不行),但是可以将每个MySQL的功能做的简单点,一个服务器只处理一点功能,做一个MySQL集群,这样可以有效解决这个问题


关系运算:

  1. 投影 只输出某个字段或者某个属性

  2. 选择 只输出符合条件的行

  3. 自然选择 在两张表的对应字段通过等值关系建立的连接叫做自然连接


表1

A1
B2
C1
D3


表2

1bash
2csh
3zsh
4ksh
5tcsh


自然连接后

A11bash
B11bash
C33zsh
D22csh


4.笛卡尔乘积


(a+b)*(c+d)=ac+ad+bc+bd


表1中每行与表2中每行分别连接=4*5=20行

通常笛卡尔乘积查找很慢,应尽量避免


5.并


表1中一行 + 表2中一行 ==新的一行



MySQL的结构组成


技术分享



表管理器:负责创建、读取或修改表定义文件;维护表描述符高速缓存;管理表锁;

表结构定义文件


表修改模块:表创建、删除、重命名、移除、更新或插入之类的操作;

表维护模块:检查、修改、备份、恢复、优化(碎片整理)及解析;


缓冲区管理器:有缓存置换策略,一般来说内存远远小于Disk,所以当操作涉及的数据量大于内存时,缓冲区管理器要按照缓存策略(如最近最少使用策略)进行数据块的加载,移除等操作


数据在磁盘上的存储:磁盘为块型设备,数据以块(block)为但为单位进行存储,在进行数据的读取(I/O操作)时也只能以块为单位进行操作;而不能像字符型设备那样直接进行按需求读取所需的字符


而一个块中往往保存着多个行(如果数据不是很大),如果将其中的某个行删除,长时间下来会差生大量的数据缝隙,进而导致存储空间的浪费,那么如何利于数据缝隙?


每个块都有一个块头,一般有存储引擎进行数据块的管理,块头里面记录了保存有多少行,即哪里是空白的,从而块头可以方便的对磁盘进行数据整理,进而避免碎片的产生


块头(记录了此块中保存多少行,哪些未保存)
缝隙(删除导致的)
数据1
缝隙
数据2


数据的记录组织:

  1. 堆文件组织,数据可以保存在文件中的任意一个位置;有利于存储,不利于查找

  2. 顺序文件组织,数据按照“搜索码”进行顺序存储;不利于存储,每次数据更新要重新排序,但有利于查找

  3. 散列文件存储,数据的某个字段进行散列运算(hash运算,如取余)然后根据不同的结果保存在不同的桶中

  4. 指针存储,每行数据在存储时还要记录下一行的指针,这样就不用按照顺序进行存储




表空间:将多个表的数据存放在同一个表空间中,标空间相当于一个更高级的数据存储空间


数据字典:表、视图等关系的元数据;如关系的名字、字段名称、字段类型、字段长度、用户名字、授权、密码等











本文出自 “11097124” 博客,请务必保留此出处http://11107124.blog.51cto.com/11097124/1896863

Mysql及数据库的基础概念

标签:mysql及数据库的基础概念

原文地址:http://11107124.blog.51cto.com/11097124/1896863

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!