一 数据库管理软件的由来
基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。
如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。
很不幸,这些假设都是你自己意淫出来的,上述假设存在以下几个问题。。。。。。
1、程序所有的组件就不可能运行在一台机器上
2、数据安全问题
3、并发
根据2的描述,我们必须写一个socket服务端来管理这台机器(数据库服务器)上的文件,然后写一个socket客户端,完成如下功能:
总结:
ps:mysql数据库管理软件是一个cs架构的套接字程序,该程序的基本流程就是客户端提交命令给服务端运行,然后服务端将结果返回给客户端,所以说白了数据库管理软件如mysql本质就是一个远程执行命令的套接字程序,数据库管理软件提供的这套命令称之为sql。
二 数据库基本概念
什么是数据(Data)
什么是记录
什么是表
什么是库(DataBase,简称DB)
什么是数据库管理系统(DataBase Management System 简称DBMS)
什么是数据库服务器
三、数据库管理软件分类
3.1 简单分为两大类
关系型与非关系型特点及区别:
非关系型数据库:redis、memcache name="egon" name1="tom" age=18 age1=19 gender1="male" gender="male" 特点: 1、数据库没有帮你组织好数据之间的关系 2、数据的存取都是在内存中 优缺点: 优点: 数据库本身的设计复杂度低+内存读写----》读写速度非常快 缺点:应用程序开发的复杂度高(应用程序需要自己组织数据的关系) 关系型数据库:mysql、oracle、db2、sql server、mariadb create table user(name varchar(15),age int,gender varchar(6)); 特点: 1、数据库帮你组织好数据之间的关系 2、数据的存取都是在硬盘 优缺点: 优点:应用程序开发的复杂度低 缺点:数据的存取速度相对慢一些 了解
mysql介绍
热度排行
数据库种类很多,我们平时接触最多的恐怕就是Oracle数据库,或者MySQL数据。两者是应用最广泛的关系型数据。
https://db-engines.com/en/ranking
3.2 数据库分类详解(了解)
3.2.1 关系型数据库
这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式), 如图2是一个二维表的实例。通常该表第一行为字段名称,描述该字段的作用,下面是具体的数据。在定义该表时需要指定字段的名称及类型。
在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上。在大型系统中通常有多个表,且表之间有各种关系。实际使用就是通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。
3.2.2 键值存储数据库
键值数据库是一种非关系数据库,它使用简单的键值方法来存储数据。键值数据库将数据存储为键值对集合,其中键作为唯一标识符。
如图是某公有云的键值存储示意图,其中键包含分区键和排序键,而值包含更多的实际信息。比如实际使用是可以以学号为键,姓名、性别、年龄和班级等信息为值进行存储。实际存储形式很灵活,是业务需求自行定义即可。
键值数据库目前应用最多的应该是Redis,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis通常最为普通关系型数据库的缓存层,用于降低数据库的访问压力,提升系统性能。
3.2.3 列存储数据库
列式存储(column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是对表中数据的存储形式的差异。
如图是传统行数据库和列数据库表中数据在磁盘上的存储形式的差异对比。对于行存储数据库,表中的数据是以行为单位逐行存储在磁盘上的;而对于列存储数据库,表中的数据则是以列为单位逐列存储在磁盘中。
列存储解决的主要问题是数据查询问题。我们知道,平时的查询大部分都是条件查询,通常是返回某些字段(列)的数据。对于行存储数据,数据读取时通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。而列存储,每次读取的数据是集合的一段或者全部,不存在冗余性问题。这样,通过这种存储方式的调整,使得查询性能得到极大的提升。
列存储数据库中最为出名的恐怕就是HBase了,HBase是 BigTable 的开源 java 版本。是建立在 HDFS 之上,提供高可靠性、高性能、列存储、 可伸缩、实时读写 NoSQL 的数据库系统。
3.2.4 面向文档数据库
此类数据库可存放并获取文档,可以是XML、JSON、BSON等格式,这些文档具备可述性(self-describing),呈现分层的树状结构(hierarchical tree data structure),可以包含映射表、集合和纯量值。数据库中的文档彼此相似,但不必完全相同。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。文档数据库可视为其值可查的键值数据库。
文档数据库种类繁多,包括MongoDB、CouchDB、 Terrastore、RavenDB和OrientDB等多大十几个。其中MongoDB是目前最为流行的文档数据库,其介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。其最大的特点是分布式部署,可以随着负载的增大动态扩容,从而满足企业业务增长的需求。
3.2.5 图形数据库
图形数据库顾名思义,就是一种存储图形关系的数据库。图形数据库是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。关系型数据用于存储明确关系的数据,但对于复杂关系的数据存储却有些力不从心。如图这种人物之间的关系,如果用关系型数据库则非常复杂,用图形数据库将非常简单。
图形种类很多,比如Neo4J、ArangoDB、OrientDB、FlockDB、GraphDB、InfiniteGraph、Titan和Cayley等。其中Neo4j 是目前最流行的图形数据库,支持完整的事务,在属性图中,图是由顶点(Vertex),边(Edge)和属性(Property)组成的,顶点和边都可以设置属性,顶点也称作节点,边也称作关系,每个节点和关系都可以由一个或多个属性。Neo4j创建的图是用顶点和边构建一个有向图,其查询语言cypher已经成为事实上的标准。
3.2.6 搜索引擎存储
搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。
搜索引擎数据库最近比较火的包括Solr和Elasticsearch等。Solr是Apache 的一个开源项目,基于业界大名鼎鼎的java开源搜索引擎Lucene。在过去的十年里,solr发展壮大,拥有广泛的用户群体。solr提供分布式索引、分片、副本集、负载均衡和自动故障转移和恢复功能。如果正确部署,良好管理,solr就能够成为一个高可靠、可扩展和高容错的搜索引擎。
Elasticsearch构建在Apache Lucene库之上,同是开源搜索引擎。Elasticsearch在Solr推出几年后才面世的,通过REST和schema-free的JSON文档提供分布式、多租户全文搜索引擎。并且官方提供Java,Groovy,PHP,Ruby,Perl,Python,.NET和Javascript客户端。目前Elasticsearch与Logstash和Kibana配合,部署成日志采集和分析,简称ELK,它们都是开源软件。最近新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash。
四 不同类型数据库的对比(了解)
4.1 MySQL和Redis的对比
1)从数据存储格式上:
有一条学生信息
mysql存储格式:
Redis存储格式:
2)从分类上
3)从运行机制上
4)从存储介质上
5)需求上
4.2 MySQL与mongdb对比
(一)关系型数据库-MySQL
1、在不同的引擎上有不同的存储方式。
2、查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。
3、开源数据库的份额在不断增加,mysql的份额也在持续增长。
4、缺点就是在海量数据处理的时候效率会显著变慢。
(二)非关系型数据库-MongoDB
非关系型数据库(nosql ),属于文档型数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系的数据。这些数据具备自述性,呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。
1、存储方式:虚拟内存+持久化。
2、查询语句:是独特的MongoDB的查询方式。
3、适合场景:事件的记录,内容管理或者博客平台等等。
4、架构特点:可以通过副本集,以及分片来实现高可用。
5、数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。
6、成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。
(三)MongoDB优势与劣势
优势:
1、在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
2、MongoDB的高可用和集群架构拥有十分高的扩展性。
3、在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。
4、MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。
劣势:
1、 不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。
2、 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。
3、MongoDB占用空间过大。
(四)对比
数据库 | MongoDB | MySQL |
---|---|---|
数据库模型 | 非关系型,MongoDB也叫文档型数据库 | 关系型 |
存储方式 | 以类JSON的文档的格式存储 | 不同引擎有不同的存储方式 |
查询语句 | MongoDB查询方式(类似JavaScript的函数) | SQL语句 |
数据处理方式 | 基于内存,将热数据存放在物理内存中,从而达到高速读写 | 不同引擎有自己的特点 |
成熟度 | 新兴数据库,成熟度较低 | 成熟度高 |
广泛度 | NoSQL数据库中,比较完善且开源,使用人数在不断增长 | 开源数据库,市场份额不断增长 |
事务性 | 仅支持单文档事务操作,弱一致性 | 支持事务操作 |
占用空间 | 占用空间大 | 占用空间小 |
join操作 | MongoDB没有join | MySQL支持join |
(五)企业选型
关系型数据库适合存储结构化数据,如用户的帐号、地址:
1)这些数据通常需要做结构化查询,比如join,这时候,关系型数据库就要胜出一筹
2)这些数据的规模、增长的速度通常是可以预期的
3)事务性、一致性
NoSQL适合存储非结构化数据,如文章、评论:
1)这些数据通常用于模糊处理,如全文搜索、机器学习
2)这些数据是海量的,而且增长的速度是难以预期的,
3)根据数据的特点,NoSQL数据库通常具有无限(至少接近)伸缩性
4)按key获取数据效率很高,但是对join或其他结构化查询的支持就比较差
五、DBA介绍
数据库管理员(Database Administrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。
DBA的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高性能。
主要职责
据库管理员的主要职责有以下几个方面:
1.设计:
数据库设计,包括字段、表和关键字段;资源在辅助存储设备上是怎样使用的,怎样增加和删除文件及记录,以及怎样发现和补救损失。
2.监控
监控数据库的警告日志,定期做备份删除。
3.备份
对数据库的备份监控和管理数据库的备份至关重要,对数据库的备份策略要根据实际要求进行更改,数据的日常备份情况进行监控。
4.SQL语句
对SQL语句的书写规范的要求一个SQL语句,如果写得不理想,对数据库的影响是很大的。所以,每一个程序员或相应的工作人员在写相应的SQL语句时,应该严格按照《SQL书写规范》一文,最后要有DBA检查才可以正式运行。
5.最终用户服务和协调
数据库管理员规定用户访问权限和为不同用户组分配资源。如果不同用户之间互相抵触,数据库管理员应该能够协调用户以最优化安排。
6.数据库安全
数据库管理员能够为不同的数据库管理系统用户规定不同的访问权限,以保护数据库不被未经授权的访问和破坏。例如,允许一类用户只能检索数据,而另一类用户可能拥有更新数据和删除记录的权限。