数据库简介

数据库

一.数据库管理软件的由来

基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。

如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。

很不幸,这些假设都是你自己意淫出来的,上述假设存在以下几个问题。。。。。。

1、程序所有的组件就不可能运行在一台机器上

#因为这台机器一旦挂掉则意味着整个软件的崩溃,并且程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目前的硬件水平,就一台机器的性能垂直进行扩展是有极限的。
#于是我们只能通过水平扩展来增强我们系统的整体性能,这就需要我们将程序的各个组件分布于多台机器去执行。

2、数据安全问题

#根据1的描述,我们将程序的各个组件分布到各台机器,但需知各组件仍然是一个整体,言外之意,所有组件的数据还是要共享的。但每台机器上的组件都只能操作本机的文件,这就导致了数据必然不一致。
#于是我们想到了将数据与应用程序分离:把文件存放于一台机器,然后将多台机器通过网络去访问这台机器上的文件(用socket实现),即共享这台机器上的文件,共享则意味着竞争,会发生数据不安全,需要加锁处理。。。。

3、并发

根据2的描述,我们必须写一个socket服务端来管理这台机器(数据库服务器)上的文件,然后写一个socket客户端,完成如下功能:

#1.远程连接(支持并发)
#2.打开文件
#3.读写(加锁)
#4.关闭文件

总结:

我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个专门的处理软件,这就是mysql等数据库管理软件的由来,但mysql解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。

ps:mysql数据库管理软件是一个cs架构的套接字程序,该程序的基本流程就是客户端提交命令给服务端运行,然后服务端将结果返回给客户端,所以说白了数据库管理软件如mysql本质就是一个远程执行命令的套接字程序,数据库管理软件提供的这套命令称之为sql。

二.数据库管理软件分类

2.1 简单分为两大类(重点)

  • 1、关系型数据库
如  
    oracle
    主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。
    也是甲骨文公司的产品。
    
    MySQL
    主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码
    因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。
    
    MariaDB
    SUN被甲骨文收购后,MySQL 的原创人员有拉出另外一个分支,
    命名MariaDB 。该数据库被维基百科,Facebook 甚至 Google 
    等技术巨头使用。 MariaDB 是一种可为 MySQL 提供插件替换功能的
    数据库服务器。开发人员的首要关注点是安全性,在每个版本发布时,
    开发人员还会合并所有 MySQL 的安全修补程序,
    并在需要时对其进行增强。
    
    sqllite
    小型数据库(django框架自带该数据库)
    
    db2
    
    sql server
    微软公司的产品,主要应用于大中型企业,如联想、方正等。
    
注意:sql语句通用
  • 2、非关系型数据库
如
	Redis、mongoDB、memcache
    	Redis:目前最火的缓存数据库 具有很多数据结构 功能强大
        mongoDB:文档型数据库 可以用在大数据和爬虫领域 
        memcache:已经被redis淘汰

可以简单的理解为:

关系型数据库拥有固定的表结构 并且表与表之间可以建立代码层面的关系	
非关系型数据库是key-value存储的,没有表结构

热度排行

数据库种类很多,我们平时接触最多的恐怕就是Oracle数据库,或者MySQL数据。两者是应用最广泛的关系型数据。

image

2.2 SQL与NoSQL的由来

数据库的服务端为了能够兼容不同类型的客户端实现数据交互
所以规定了统一的交互方式
	关系型数据库>>>:SQL语句
     非关系型数据库>>>:NoSQL语句
# NoSQL有时候也表示 非关系型数据库

三. 不同类型数据库的对比(了解)

3.1 MySQL和Redis的对比

1)从数据存储格式上:

有一条学生信息

jason   性别:男    年龄:23   籍贯:山东   手机:1234567890

mysql存储格式:

uid	  姓名	sex    age    home     phone
001	  jason    男	    23     山东    1234567890   

Redis存储格式:

name001:jason
sex001:男
age001:23
home001:山东
phone001:1234567890

2)从分类上

MySQL是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。

Redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。

3)从运行机制上

mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库。
第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;
第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。

redis数据库是一款缓存数据库,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。

4)从存储介质上

mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。

redis用于存储使用较为频繁的数据到缓存中,读取速度快。

5)需求上

MySQL和Redis因为需求的不同,一般都是配合使用
配合使用方案通常为:MySQL(主) + Redis(辅)

理由:
MySQL把数据存储于硬盘,偏向于存数据
Redis把数据存储于内存,偏向于快速取数据
但MySQL支持sql查询,可以实现一些关联的查询以及统计,因此Redis查询复杂的表关系时不如MySQL
所以可以把热门的数据放Redis,MySQL存基本数据。
ps:在有限的条件下不能把所有数据都放在Redis.

3.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或其他结构化查询的支持就比较差

posted @ 2022-02-17 19:07  zong涵  阅读(22)  评论(0编辑  收藏  举报