存储与数据库 | 青训营
存储&数据库
案例导入
- 数据库怎么保证数据不丢失
- 数据库如何处理多人同时修改数据的问题
- 为什么使用数据库作为存储,除了数据库还能将数据存到其他存储系统中吗
- 数据库只能处理结构化数据吗
- 有哪些操作数据库的方式,要用什么编程语言
存储系统
- 作为后端软件的底座,性能敏感(很可能会被高并发、多次操纵)
- 存储系统软件架构容易受硬件影响(存储系统软件需要与存储硬件介质接轨,因此底层硬件发生变化,软件架构通常需要随之变化)
- 存储系统代码,既“简单”(主要是IO方面,因为需要保证大量高并发操作的性能,IO操作过于复杂,容易出问题),又“复杂”(需要考虑到各种异常情况,因此其涉及到的异常处理逻辑比较复杂)
追求性价比,稳定、容量较大、速度较快且价格不高——Persistent Memory
经验之谈
数据库
主流存储&新技术
主流产品
单机存储
分布式存储
- 系统支持对象接口、块接口、文件接口,一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法(Hash+权重+随机抽签)
单机数据库
单机关系型数据库
- Query Engine —— 负责解析query,生成查询计划
- Txn Manager —— 负责事务并发管理
- Lock Manager —— 负责锁相关的策略
- Storage Engine —— 负责组织内存/磁盘数据结构
- Replication —— 负责主备同步
单机非关系型数据库
- 面向【文档】存储
- 文档可序列化成JSON/BSON,支持嵌套
- 存在【collection】,collection = 文档的集合
- 存储和构建索引的能力依赖 wiredTiger 引擎
- 4.0后开始支持事务(多文档、跨分片文档等类型的事务)
- 常用client/SDK交互,可通过插件转译支持弱 SQL 交互
- 数据结构丰富(hash表、set、zset、list)
- C语言实现,具有超高性能
- 主要基于内存,但支持AOF/RDB持久化
- 常用redis-cil/多语言SDK交互
- 面向【文档】存储
- 文档可序列化成JSON,支持嵌套
- 存在【index】,index = 文档的集合
- 存储和构建索引的能力依赖 Lucene 引擎
- 实现了大量搜索数据结构 & 算法
- 支持 RESTFUL API,也支持弱 SQL 交互
- 与RDBMS相比,天然能做【模糊搜索】,还能自动算出关联程度(RDBMS需要上层设计模糊匹配)
分布式数据库
单机数据库系统在使用过程中有以下几个主要问题
- 较于单机数据库系统,支持多写(多人写入操作)
- 从磁盘弹性(问题解决中提到的)扩展到了内存弹性
- 分布式事务优化
新技术
目前现状
- 存储介质变更
- 计算单元变更
- 网络硬件变更
SPDK
AI & Storage
- 传统的数据存储通常是列存或是行存,但是单一存储格式并不能最大化利用存储空间,
- 而行列混存这个设想可以解决这个问题,但是Storage是动态变化的,所以需要AI动态决策行列混存策略