Go语言存储和数据库 01 | 青训营笔记

181 阅读6分钟

1. 数据的持久化

校验数据的合法性——>修改内存(数据结构)——>写入存储介质(寿命)

2.数据库&存储

2.1 存储系统

存储系统是指计算机中由存放程序和数据的各种存储设备、控制部件及管理信息调度的设备(硬件)和算法(软件)所组成的系统。

存储系统就是计算机存储程序和数据的系统

由各种存储设备和控制部件及管理信息调度的硬件和软件组成,具有存入和取出两大功能。

2.1.1存储系统特点

  1. 性能敏感
  2. 代码既简单又复杂
  3. 容易受硬件影响

2.1.2存储器层级结构

大容量的储存元件便宜,但运算速度慢

运算速度快的储存元件运算速度快,但价格高,存储内容小

2.1.3数据从应用到存储介质

缓存很重要,贯穿整个存储体系

拷贝很昂贵,应该尽量减少

硬件设备多样,要有抽象统一的接口

2.1.4 RAID技术

高性能+高性价比+高可靠性

RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。

背景:

  • 单块大容量磁盘价格>多块小容量磁盘
  • 单块磁盘的写入性能<多块磁盘的并发写入性能
  • 单块磁盘的容错能力有限,不够安全
  1. RAID0

    将多块磁盘组合在一起形成一个大容量的存储。当我们要写数据的时候,会将数据分为N份,以独立的方式实现N块磁盘的读写

    • 性能高:RAID0 的读写性能理论上是单块磁盘的N倍
    • 安全性低:不提供数据校验或冗余备份,一旦某块磁盘损坏,数据无法恢复
  2. RAID1

    RAID1 是磁盘阵列中单位成本最高的一种方式

    在往磁盘写数据的时候,将同一份数据无差别的写两份到磁盘,分别写到工作磁盘和镜像磁盘,实际空间使用率只有50%

    • 性能低
    • 安全性高
  3. RAID 1+0 和 RAID 0+1

    RAID 0+1 也称RAID10,是先创建2个独立的RAID1,再将这两个独立的RAID1组成一个RAID0

    RAID 0+1 是先创建2个RAID0 再用这两个RAID0组建一个RAID1

    两者均综合了RAID0和RAID1优缺点。

    • 降低了RAID1的高安全性,弥补了RAID0的不足
    • 降低了RAID0的高速和磁盘利用率,弥补了RAID1的不足

    均最少需要4个磁盘组成,而且需要的磁盘数为4的倍数。磁盘有效容量是总容量的一半

2.2 数据库

2.2.1 关系型数据库

关系 = 集合 = 任意元素组成的若干有序偶对反应了事务间的关系

关系代数 = 对关系作运算的抽象查询语言

SQL(结构化查询语言Structured Query Language )

= 一种DSL(领域特定语言domain-specific language )

= 方便人类阅读的关系代数表达形式

关系型数据库时存储系统,但有其他能力:

  • 对结构化数据友好
  • 支持事务(ACID)
  • 支持复杂查询语言(SQL)

2.2.2 非关系型数据库

非关系型数据库也是存储系统,但是一般不要求严格的结构化

  • 半结构化数据友好
  • 可能支持事务(ACID)
  • 可能支持复杂查询语言(SQL)

2.3 数据库 VS 经典存储

2.3.1 结构化数据管理

关系型数据库:表形式

文件:自行定义结构体

2.3.2 事务能力

数据库ACID

数据库中:事务(Transaction)是访问和更新数据库的程序执行单元,事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行

ACID是衡量事务的四个特性

  • 原子性(Atomicity)事务内的操作要么全做,要么不做

    • 一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做
    • 数据库中:如果事务中一个sql语句执行失败,则已执行的语句也必须回滚,数据库退回到事务前的状态
  • 一致性(Consistency)事务执行前后,数据状态是一致的

    • 一致性是指事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。
    • 数据库的完整性约束包括但不限于:实体完整性(如行的主键存在且唯一)、列完整性(如字段的类型、大小、长度要符合要求)、外键约束、用户自定义完整性(如转账前后,两个账户余额的和应该不变)
  • 隔离性(Isolation)可以隔离多个并发事务,避免影响

    • 隔离性研究的是不同事务之间的相互影响。

    • 隔离性是指,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

    • 通常使用锁机制来保证事务的隔离性 :

      • 锁机制
      • 脏读、不可重复读和幻读
  • 持久性(Durability)事务—旦提交成功,数据保证持久性

    • 持久性是指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

2.3.3 复杂查询能力

数据库:select

2.4 数据库使用方式

以SQL为例,要操作数据时,支持以下操作:要对数据定义做修改时,支持以下操作:

操作数据:

Insert

Update

Select

Delete

where子句

GroupBy

OrderBy

对数据定义进行修改:

Create user

Create database

Create table

Alter table

2.4.1 数据定义语言(DDL)

DDL全称是Data Definition Language

定义语言就是定义关系模式、删除关系、修改关系模式以及创建数据库中的各种对象

CREATEALTERDROP和TRUNCATE四个语法组成

2.4.2 数据操纵语言(DML)

DML 全称是Data Manipulation Language

进行插入元组、删除元组、修改元组的操作

insertupdatedelete语法组成

2.4.3 数据查询语言(DQL)

DQL 全称是Data Query Language

用来进行数据库中数据的查询

最常用的select语句

2.4.5 数据控制语言(DCL)

DCL 全称是Data Control Language

用来授权或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,能够对数据库进行监视

常见的授权、取消授权、回滚、提交等操作