前言
- 数据库其实跟
node
关系不大,但是又无法绕过的一个话题 - 这门知识非常深要研究的很细的话很难,有个职业叫
DBA
,专门来管理数据库的,也就是说单独学好数据库就可以找工作 - 对于前端的话,能用就行了,一般面试前端不会问数据库的知识
1. 数据库是什么
数据库是用来 组织、存储和管理数据的仓库
2. 数据库能做什么
2.1 持久的存储数据
之前我们存储数据一般都是直接存到内存中,或则磁盘中
内存中数据
- 内存中的数据也就是我们代码中的变量、函数这些
- 优点是:读写速度非常的快
- 缺点是:内存容量小(一般内存比较贵)。无法持久化保存,一旦程序停止,或则电脑关机,对应的内存的数据就会销毁
- 存储数据的格式:内存中的数据可以存储任意类型的数据,比如二进制、字符串、数组、数字等
磁盘中的数据
- 我们电脑中的大部分的文件都是存在磁盘中的
- 优点是:磁盘空间大,可以持久化存储
- 缺点是:读写速度非常的慢
- 存储数据的格式:一般是存的是 字符串、二进制,存储格式比较少
总结
磁盘的存储格式比较有限,当程序需要从磁盘中读取数据到内存中的时候,格式可能不一致,需要自己手动转换,非常的麻烦
所以说到底,数据库就是为了适配内存与磁盘之间的存储格式不一致的问题,数据库就是磁盘与内存的中间桥梁,最后数据库也是存储在磁盘上的
2.2 备份和恢复数据
可以制定策略自动备份数据,根据备份的数据来恢复数据,这样就非常灵活,安全性也是非常高
2.3 快速的存取数据
相对于磁盘而言,数据库可以存取数据非常的快,而且可以按量取数据,比如取一条也行,取100条也行,非常的灵活,还包括快速的按条件搜索数据
2.4 权限控制
数据可以分配不同的权限给不同的用户,更加方便,更加精细化的管理存储的数据
3. 数据库类型
3.1 关系型数据库
什么是关系型数据库
就是表达了数据表与数据表之间关系的数据库,你可以简单的把它理解成excel
表格
优点
- 能够表达非常复杂的数据关系(各个表之间的复杂联系关系)
- 强大的查询语言,能够精准的找到你想要的数据(查询条件非常的细化,非常的强大)
缺点
- 读写性能差。特别是当数据量大起来之后,读写性能下降的比较严重(相对于非关系型数据库)
- 数据结构比较死板。类似于
excel
它的每一列事先定义好,不可以改变,每增加活修改数据,都不能多出来列,也不行少列
用途
一般复杂的数据用关系型数据库,我们日常用的业务数据,一般都会使用关系型数据,比如用户 订单 地址
等
代表
- Oracle(太重量级了)
- Mysql(免费,轻量级,一般选择这个)
- Sql Serer(太重量级了)
3.2 非关系型数据库
3.2.1 什么是非关系数据库
以非常简单的结构来存储数据
3.2.2 分类
文档型
按照文档的形式存储数据,想写什么信息就什么信息,数据结构不受约束,类似于JS
中的对象,对象里面可以包含任何形式的数据。
典型代表就是MongoDB
键值对
以键值对的形式存储数据,就是 key
和value
的形式。典型代表就是 redis
优点
格式灵活
因为的列是不固定的,随时可以改,所以非常的灵活,不像excel
一样,列是固定的,不可以修改
读写效率高
特别是在数据量大的时候,读写效率非常高,比关系型数据库高很多,这是由于底层设计导致的
3.2.3 缺点
- 无法表达复杂的关系结构
- 对于复杂的查询效率不高
3.2.4 用途
适合存储结构比较简单、数据量大的数据
比如用户访问数据、地理位置信息(车辆轨迹) ,结构简单并且数据量非常大,就非常适合非关系型数据
3.2.5 代表
MongoDB
redis
Membase
3.3 面向对象数据库
- 一般是请类型语言用到的,比如
Java
,C#
- 它可以实现将对象数据结构直接存到数据库,获取的时候也是直接获取对象数据,非常的方便,省去了转换的过程
- 一般都是商业级的,收费的,比如
ObjectDB
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。