存储高性能方案以及数据库基本分类

497 阅读2分钟

一、高性能方案:

1.读写分离:

设计初衷:分散访问压力(没有分散存储压力)

基本实现:主从集群,主负责写,从负责读,主同步数据到从机

引入问题:主从同步延迟(注册后无法读取数据)

解决方法:关键任务都读写到主机上(注册,登陆),非关键业务采取读写分离。

2.分库分表:

设计初衷:分散访问和存储压力(千万,亿级时单机瓶颈,备份成本,数据丢失风险)

基本实现:

1.业务分库:(初创团队不适用,后期做起来资源多后再提升)

引入问题:无法join,事务复杂度和性能问题,成本问题

2.分表

  • a.垂直分表:解决访问字段频率不一致的问题,提升性能

    引入问题:表操作数量增加

  • b.水平分表:(行数>5000万可以考虑进行分表)

    引入问题:分布式会引入路由复杂度,join的次数up,count访问次数up(记录数表,用一 张表记录count这些常用汇总数据),order by操作只能在业务层做 解决方法:程序代码封装和中间件封装

二、数据库分类及优缺点:

1.关系数据库(MySQL):

优点:强大的SQL和ACID属性

缺点:无法存储数据结构,schema(表结构)扩展不方便,I/O较高,全文搜索较弱

2.NoSQL(牺牲ACID-原子,一致,隔离,持久):

  • a.K-V存储(Redis):解决数据结构的问题,提供数据结构的能力,主要牺牲A和D

  • b.文档数据库(MongoDB):解决schema问题,新增字段简单,历史数据不会出错,存储 复杂数据,主要牺牲A,无法做join,一般用作对mysql的辅助

  • c.列式数据库(HBase,ClickHouse):解决大数据场景I/O问题,拥有更高的压缩效率,不 适用于频繁更新的业务,适用数据统计及分析(人物画像),牺牲AC

  • d.全文搜索引擎(Elastic Search):解决全文搜索慢的问题(倒排索引),高可用,扩展性,牺牲了C