存储系统知识体系
2022-11-10 10:04:18 0 举报
AI智能生成
用于快速建立整个存储系统的知识体系
作者其他创作
大纲/内容
数据量
读QPS
写TPS
请求量
预留量
评估维度
估算性能需求
MySQL
PostgreSQL
Oracle
OLTP
ClickHouse
Hive
OLAP
SQL
MongoDB
Couchbase
文档型
HBase
Cassandra
列式存储
Redis
Memcache
KV型
ElasticSearch
全文搜索
OSS
对象存储
HDFS
类文件系统
InfluxDB
时序存储
NAS
文件存储
Neo4j
图数据库
PostGIS
空间数据库
NoSQL
TiDB
NewSQL
主要分类
应用场景
优缺点
性能量级
根据存储系统的技术本质
分支主题
选择依据
选择存储系统
数据模型设计
处理读、写请求的时间复杂度
算法设计
设计存储方案
三步骤
理解技术本质
主从
Sentinel
Cluster
Redis的几种部署架构
明确部署架构
String
List
Sorted List
Table
Column
研究数据模型
如何用Redis存储关注关系?
如何用HBase存储关注关系?
模拟业务场景
如何学习存储系统?
先宏观,后微观
存储系统设计
区:城市或区域
城市级别的灾难:地震、水灾
容灾
就近访问
作用
概念
基于用户IP实现就近访问
DNS
GLSB
实现原理
数据中心建设成本
成本
增加新的分区
可扩展性
设计要点
集中式
独立备份
互相备份
策略
备份策略
分区架构
数据均匀分布
注意:数据均匀分布后请求不一定均匀
核心原则
范围
一致性Hash
Hash
分片规则
用户ID
订单ID
ID
日期/时间
分片键
分片算法
配置文件
静态路由
有独立的配置中心记录分片/路由信息
配置中心需要保障高可用
1. 客户端先向配置中心发起分片/路由查询
2. 然后再向具体的节点发起读写请求
读写流程
MongoDB Cluster
HDFS NameNode
实例
配置中心
每个节点保存所有的分片/路由信息
最终一致性
一般通过gossip协议实现分片/路由信息的更新
Redis Cluster
客户端转发
Elasticsearch
服务端转发
分类
路由转发
动态路由
路由规则
高可用
分片架构
提升数据库的读性能
不能提升数据库的写性能
读多写少
场景
一主多从
主、从库都存储了全量的数据
通过binlog实现复制
同步复制
半同步复制
异步复制
复制方式
主从复制
核心要点
读主库或从库
写主库
需要代码层面的改造
读写绑定:写操作后的读操作指定去读主库
只适用于先insert后select场景
可能会增加主库的读压力
读从库失败后,重试读主库
核心业务都读写主库
非核心业务读写分离
业务分级
解决办法
复制延迟
主节点写入可能成为瓶颈
无法应对数据量的不断增加
存储可能成为瓶颈
带来的复杂度
主要用于备份
有效防止删库、删表等指令
延迟从库
扩展
Sharding-JDBC
SDK
MyCAT
中间件Proxy
实现方式
读写分离
用户库
订单库
商品库
按业务领域拆分库
跨库join
跨库order by
跨库事务
分库太多导致数据库的活跃连接数太多
应用代码实现
分库
不同的列访问频率不一样
拆分时机
用户登录信息表
用户基本信息表
同一个表拆分列到不同的表中
垂直拆分
经验值:2000w行
0 — 1000
1000 — 2000
2000 — 3000
分段(范围)
日志数据
流水数据
按日期
hash
一致性hash
路由算法
跨表count(id)
跨表order by
水平拆分
分表
分库分表
分库分表通常结合使用
主库
主要用于备份数据(数据恢复)
不承担读、写请求
延迟备库
备库
主备
承担读、写请求
承担读请求
从库
Bully
Raft
Zab
Paxos
一致性算法
基于zookeeper实现
选举
异地灾备
异地多活
Prepare
Commit
2PC
3PC
分布式事务
集群
存储系统知识体系
0 条评论
回复 删除
下一页