Day13 存储与数据库| 青训营笔记

59 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第13天

数据->后端服务器->数据库

数据的持久化

校验数据的合法性、修改内存、写入存储介质

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

存储系统特点:性能敏感,代码简单,但是并发高可用比较复杂,软件架构容易受硬件影响

缓存很重要,贯穿整个体系,拷贝很昂贵要避免

RAID技术:

Redundant Array of Inexpensive Disks

关系型数据库 = 集合 = 任意元素组成的若干有序偶对

  • 结构化友好
  • 支持事务
  • 支持SQL等复杂查询语言

非关系型数据库

  • 半结构化
  • 不一定支持事务
  • 可能支持SQL

A 要么全做 要么不做

C 执行前后状态是一致的

I 多个并发事务

D 一旦提交成功,数据保证持久性

主流产品剖析

本地文件系统

Ext2/3/4 sysfs rootfs

Linux两大数据结构 Index Node & Directory Entry

Index Node:记录文件数据id、大小、权限等,是文件的唯一标识,

Directory Entry:记录文件名、inode指针、层级关系等,内存结构

KV存储

image-20230212225748467

分布式文件系统 - HDFS

  • 支持海量数据存储
  • 高容错性
  • 弱POSIX语义
  • 使用普通x86服务器、性价比高

分布式存储系统Ceph

  • 一切皆对象
  • 主备复制模型
  • 数据分布模型采用CRUSH算法

单机数据库

关系型:MySQL PostgreSQL

RedoLog:记录在哪个Page进行了什么操作

非关系型数据库:Mongo、Redis、ES三足鼎立

ES

  • 文档存储
  • index = 文档的集合
  • 序列化成JSON,支持嵌套
  • 存储和构建索引能力依赖Lucene引擎
  • 实现大量搜索数据结构&算法
  • 支持RESTful API、SQL交互

mongoDB

  • 面向文档存储
  • 支持序列化JSON
  • collection = 文档的集合
  • wiredTiger引擎
  • 支持事务
  • client/SDK交互

Redis

  • 数据结构丰富
  • C语言实现,超高性能
  • AOF

单机数据库问题

  • 容量:单点容量有限,受硬件限制 用池化来解决
  • 弹性:扩容 缩容
  • 性价比:

分布式问题

单写 vs 多写

磁盘弹性到内存弹性

分布式事务优化