设为首页 收藏本站
查看: 822|回复: 0

[经验分享] Mysql及数据库的基础概念

[复制链接]

尚未签到

发表于 2018-10-10 13:16:05 | 显示全部楼层 |阅读模式
  DBMS:数据库管理系统

  •   层次模型
  •   网状模型
  •   关系模型
  RDBMS:关系型数据库管理系统
  文件存储:数据的冗余和不一致性难以解决
  当数据量很大时,文件存储的访问很困难
  当数据在不同的文件时,可能会造成数据的格式不一致,及数据太过于分散造成数据孤立
  数据的完整性问题(如两个银行之间转钱过程中出现故障,要保证总额一致)
  并发访问异常(如多人同时访问一个文件时,一个人在进行修改操作,其他人就不能访问)
  原子性问题(数据从一个稳定状态转移到另一个状态)
  安全性也得不到保障
  1.表示层:文件或者表
  2.逻辑层:文件系统或者存储引擎
  负责将底层的数据块抽象为文件供用户查看;而在存储数据时要靠文件系统将数据解构为物理层的数据(即完成从表示层到物理层的映射)
  3.物理层:数据块,元数据
  存储引擎:可以将文件系统理解文存储引擎,将不同的格式的数据转换为表示层的文件,还能将文件存储为物理数据。这两个过程的完成都要由存储引擎来完成
  关系:可以将关系理解为一张表
  属性:表中每一个列描述一个属性
  实体:表中的每一行为一个实体(记录)
  而整个表就是同一类实体的集合
  E-R关系模型(即实体关系模型):将一个表拆分为多个表(实体),降低数据的冗余度
  能够实现存储在关系型数据库中的关系模型有四种:
  关系模型(结构化的数据模型):它的每个字段都是有相同属性的,如第一列为Name,第二列为Passwd
  1.关系模型:靠一张二维表存储数据,
  2.实体关系型:将表拆分成多个不同的实体,让实体之间通过不同的约束建立联系
  3.对象关系型模型:基于对象的数据类型
  如:将一个很大的数据(如图片)存储在数据管理系统的某个空间上,并在表中用一个指针指向这个数据的存储地址,将其基于对象进行管理
  4.半结构化数据模型:在同一个表中每一行表示的数据可能不一样;如
  Name:Age:Gender
  Name:UID:Birthdate
  半结构化数据模型:在存储时既要把数据存储下来还要把数据定义的结构存储下来,以XML(扩展标记语言)格式进行存储
  Jerry
  50
  gender:
  而现在大多数的商业或者开源的关系型数据管理系统都能有效的处理以上四种数据模型
  关系:代数运算(如求交集、并集、补集等等)
  约束:如填入一个230的年龄数据库必须要能检测出来
  域约束:数据类型约束,如必须填入int,填入char错误
  外键约束:引用完整性约束。一个表中的字段必须与另一个表中的字段相同并且其值要一一对应
  主键约束:某字段(或多个字段组合)能唯一标识此行的实体
  注:任意两个实体在主键上不能出现相同值,并且不能为空
  如/etc/passwd 中的uid不同则可以作为主键、Name不同也可以作为主键
  唯一性约束:没一行的某字段都不允许出现相同的值,可以为空,且可以有多个
  注:所以一个表中只能有一个主键约束,但可以有多个唯一性约束
  检查性约束:如age0
  注: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
A1B2C1D3  表2
1bash2csh3zsh4ksh5tcsh  自然连接后
A11bashB11bashC33zshD22csh  4.笛卡尔乘积
  (a+b)*(c+d)=ac+ad+bc+bd
  表1中每行与表2中每行分别连接=4*5=20行
  通常笛卡尔乘积查找很慢,应尽量避免
  5.并
  表1中一行 + 表2中一行 ==新的一行
  MySQL的结构组成
DSC0000.png

  表管理器:负责创建、读取或修改表定义文件;维护表描述符高速缓存;管理表锁;
  表结构定义文件
  表修改模块:表创建、删除、重命名、移除、更新或插入之类的操作;
  表维护模块:检查、修改、备份、恢复、优化(碎片整理)及解析;
  缓冲区管理器:有缓存置换策略,一般来说内存远远小于Disk,所以当操作涉及的数据量大于内存时,缓冲区管理器要按照缓存策略(如最近最少使用策略)进行数据块的加载,移除等操作
  数据在磁盘上的存储:磁盘为块型设备,数据以块(block)为但为单位进行存储,在进行数据的读取(I/O操作)时也只能以块为单位进行操作;而不能像字符型设备那样直接进行按需求读取所需的字符
  而一个块中往往保存着多个行(如果数据不是很大),如果将其中的某个行删除,长时间下来会差生大量的数据缝隙,进而导致存储空间的浪费,那么如何利于数据缝隙?
  每个块都有一个块头,一般有存储引擎进行数据块的管理,块头里面记录了保存有多少行,即哪里是空白的,从而块头可以方便的对磁盘进行数据整理,进而避免碎片的产生
块头(记录了此块中保存多少行,哪些未保存)缝隙(删除导致的)数据1缝隙数据2  数据的记录组织:

  •   堆文件组织,数据可以保存在文件中的任意一个位置;有利于存储,不利于查找
  •   顺序文件组织,数据按照“搜索码”进行顺序存储;不利于存储,每次数据更新要重新排序,但有利于查找
  •   散列文件存储,数据的某个字段进行散列运算(hash运算,如取余)然后根据不同的结果保存在不同的桶中
  •   指针存储,每行数据在存储时还要记录下一行的指针,这样就不用按照顺序进行存储
  表空间:将多个表的数据存放在同一个表空间中,标空间相当于一个更高级的数据存储空间
  数据字典:表、视图等关系的元数据;如关系的名字、字段名称、字段类型、字段长度、用户名字、授权、密码等


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-620001-1-1.html 上篇帖子: centos7安装mysql-china 下篇帖子: MYSQL查询语句优化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表