数据库总结

后端

Posted by JY on August 10, 2020

数据库介绍

数据库的ACID原则

A: 原子性(Atomicity)

  • 一个事务(Transaction) 必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚(Rollback) 到事务开始前的状态。不可能只执行其中的一部分操作

C: 一致性(Consistency)

  • 在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏,即数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。

I: 隔离性(Isolation)

  • 多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。也就是说,一个事务所做的修改在最终提交以前,对其他事务是不可见的

D: 持久性(Durability)

  • 在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
关系型数据库
  • 采用关系模型来组织数据
    • 关系模型指二维表格模型,在表中将信息和字段关联起来,从而存储数据。表需要在存储数据之前被定义出来。
    • 一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
    关系模型中常用的概念:
    关系:一张二维表,每个关系都具有一个关系名,即表名
    元组:二维表中的一行,在数据库中被称为记录
    属性:二维表中的一列,在数据库中被称为字段
    域:属性的取值范围,即数据库中某一列的取值限制
    关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
    关系模式:指对关系的描述,其格式为:关系名(属性1,属性2, ... ... ,属性N),在数据库中成为表结构
    
  • 常见的关系型数据库有:SQLite, Oracle, Mysql, PostgreSQL, …
  • 优点:
    • 容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
    • 使用方便:通用的SQL语言使得操作关系型数据库非常方便
    • 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
  • 缺点:
    • 网站的用户并发性高,往往达到每秒上万次读写请求,对关系型数据库而言,硬盘的I/O是一个很大的瓶颈
    • 网站每天产生的数据量巨大,对关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的
    • 在基于web的结构中,数据库是最难进行横向拓展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法简单的通过添加更多的硬件和服务节点来拓展性能和能力,对数据库系统进行升级和拓展时,往往需要停机维护和数据迁移
    • 在多表的关联查询和复杂数据分析类型的复杂SQL报表查询等方面性能欠佳。关系型数据库遵循ACID原则,为了保证数据库的ACID特性,必须尽量按照其要求的范式进行设计,关系型数据库中的表都是存储一个格式化的数据结构。
非关系型数据库
  • 采用非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统
    • 以键值对存储,且结构不固定,每个元组可以有不一样的字段,每个元组可以根据需要增加键盘对,不局限于固定的结构,可以减少一些时间和空间的开销
  • 常见的非关系型数据库:MongoDB, Redis, HBase, …
  • 优点:
    • 用户可以根据需要添加字段,在信息查询时,仅需要根据id取出相应的value即可完成查询,不像关系型数据库中,需要对多表进行关联查询
    • 适用于SNS(Social Networking Services)中,例如facebook,微博系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库难以应付,需要新的结构化数据存储。由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
  • 缺点:
    • 只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,关系型数据库显的更为合适
    • 不适合持久存储海量数据
关系型与非关系型数据库的比较
  1. 成本:Nosql数据库简单易部署,基本都是开源软件,不需要像使用Oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
  2. 查询速度:Nosql数据库将数据存储于缓存之中,而且不需要经过SQL层的解析,关系型数据库将数据存储在硬盘中,自然查询速度远不及Nosql数据库。
  3. 存储数据的格式:Nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
  4. 扩展性:关系型数据库有类似join这样多表查询机制的限制,导致扩展很艰难。Nosql基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
  5. 持久存储:Nosql不使用于持久存储,海量数据的持久存储,还是需要关系型数据库
  6. 数据一致性:非关系型数据库一般强调的是数据最终一致性,不像关系型数据库一样强调数据的强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据,Nosql不提供对事务的处理。

img

目前主流的还是关系型数据库,非关系型数据库中Redis和MongoDB最受欢迎

各类数据库总结

MySQL
# 安装
brew install mysql # mac系统可用brew下载

# 直接进入官网下载安装包
https://dev.mysql.com/downloads/mysql/
(建议安装过程中选择Use Legacy Password Encryption)

# 启动MySQL
mysql.server start

# 关闭MySQL
mysql.server stop

# 查看状态
mysql.server status
PostgreSQL
pg_ctl -D /usr/local/var/postgres -l logfile start  # 启动

pg_ctl -D /usr/local/var/postgres -l logfile stop   # 关闭
MongoDB
mongod --dbpath /Users/jiangyu/mangodb/data  # 启动mongodb服务端,指定数据库路径
control+c # 停止mongo服务端

mongo # 连接mongodb客户端
control+d #退出mongodb客户端
Redis
redis-server # 服务端工具
control+c    # 停止服务端
redis-cli    # 客户端工具
shutdown     # 在客户端输入,也可以停止服务端
Hbase
brew install hbase # 安装
start-hbase.sh # 启动
jps # 查看是否启动
stop-hbase.sh # 停止

可视化工具

  • navicat

    支持MySQL、PostgreSQL、Oracle、SQLite、SQL Server、MariaDB、MongoDB

  • redis可视化工具

    • vscode 插件: https://marketplace.visualstudio.com/items?itemName=Dunn.redis

    • RedisDesktopManager

  • Hbase可视化工具

    • HBaseXplorer: https://github.com/bit-ware/HBaseXplorer/downloads
    • HbaseGUI: https://github.com/Observe-secretly/HbaseGUI/wiki/Release-history