后端-数据库day1| 豆包MarsCode AI 刷题

63 阅读3分钟

认识存储与数据库

案例引入

小明注册登录产生的数据流入后端 格式为json

{
    "user_name":"小明",
    "password":"helloword",
    "password_hint":"coding",
    ......
}

数据流入后端并被处理,参与的有:后端服务器,数据库,以及其他系统。

数据的持久化

  1. 校验数据的合法性
  2. 修改内存
  3. 写入存储介质

存储系统

一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以成为存储系统。

存储系统的特点:

1.性能敏感。 2.容易受硬件影响。

存储层级结构

【缓存】很重要,贯穿整个存储体系。 【拷贝】很昂贵,应该尽量减少。 【接入层】要统一,使用的是Json。

RAID计数

高性能、高性价比、高可靠性

背景:

1.单块大容量磁盘价格 > 多块小容量磁盘.

2.单块磁盘的写入性能 > 多块磁盘的并发写入性能.

3.单块磁盘的容错能力有限,不够安全.

RAID 0和RAID 1是两个极端,不过有RAID 0+1结合折中

数据库

关系型数据库

关系=集合,反映了事物间的关系。

关系代数是对关系做运算的抽象查询语言。

关系型数据库在存储之外还有其他能力: 结构化数据友好,支持事务,支持复杂查询语言

非关系型数据库

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

结构化数据管理

写入关系型数据库时,以表形式管理。 写入非关系型数据库时,写入文件,自行管理结构(可以以字节为单位管理)。

事务

A:要么全做要么全不做

C:事务执行前后,数据状态一致

I:可以隔离多个并发事务,避免影响

D:事务一旦提交成功,数据保证持久性。

复杂查询

使用SQL语言比使用for循环简洁方便得多

主流产品剖析

单机存储

一般不涉及网络交互。

Linux经典哲学一切皆文件。

一切皆key-value键值对,某种程度上牺牲读性能,追求写入性能

拳头产品:RocksDB

分布式存储

在单机存储基础上实现了分布式协议,涉及大量网络交互。

核心特点: 支持海量数据存储,高容错性,弱POSIX语义,使用x86服务器,性价比高。

ceph万金油

一切皆对象。

数据写入采用主备赋值模型。

数据分布模型采用CRUSH算法(hash+权重+随机抽签)

单机关系型数据库

事务在单机内执行,也可能通过网络交互实现分布式事务。

商业Oracle,开源产品MySQL,PostgreSQL

单机非关系型数据库

MongoDB,Redis,Elasticsearch。

交互方式各不相同,schema相对灵活。

Ela面向文档存储,支持嵌套,支持弱SQl交互。

MonDB支持事务,可以转译支持弱SQL。

Redis数据结构丰富,C语言实现,性能高。

使用案例

ES天然能进行模糊搜索,并计算出相关程度。

从单机到分布式

单点容量有限,受硬件限制。

存储节点池化,动态扩容。

解决弹性问题。

解决性价比问题。

有挑战性的问题

单写到多写,从磁盘弹性到内存弹性,分布式事务优化。