传统开发读写优化与HBase
传统开发读写优化与HBase
一、传统开发数据读写性能优化
1、Mysql 分表、主从复制与读写分离
-
一种分表方案:设置表A 表B
表A 自增列从1开始 步长2
表B 自增列从2开始 步长2
配置文件my.ini(window) 主键为奇数进表A 偶数进表B -
通过Mycat
增删改:写 => 主表 强一致性:InnoDB
查询:读 => 从表 弱一致性:MyIsam
主从表之间 => 通过二进制日志binlog实现主从表的数据同步具体主从复制的工作过程请参考:MySQL主从复制与读写分离(附配置实例)
2、Redis(缓存型数据库)主从复制与读写分离
缓存数据库:哨兵【主从复制】,集群
后端查询都从Redis走
【定期】将关系型数据库数据【同步】到Redis:实时性(一致性)
具体过程参考:Redis主从复制、哨兵、Cluster三种模式摸透
主从复制存在一定的数据延迟,大数据不强调一致性,只需最终一致性
二、HBase
HBase是一个建立在HDFS之上的分布式,提供高可靠性,高性能,列存储,可伸缩,实时读写NoSQL的数据库系统。
Hbase 本身就是集群 主要优点之一:吞(写)吐(读)量大
1、HBase列存储优点
大数据时代 数据维度 数据本身变得越来越复杂,不能用简单的数据二维数据表格
支持大量稀疏存储,即允许大量列值为空,并不占用任何存储空间。这与传统数据库不同,传统数据库对于空值的处理要占用一定的存储空间,这会造成一定程度的存储空间浪费。因此可以使用HBase存储多至上百万列的数据,即使表中存在大量的空值,也不需要任何额外空间
2、HBase为什么吞吐量大
吞:
每一个列族,对应一个存储区 一个store file 对应一个列族,对应一个name store 写到store就行了,并型写,内存写,支持批量操作
批量导入:采取峰值80-90%,以这个批次往数据库里放
写入MS 之前先写一份到Hlog
HRegionServer
如果内存数据丢了。核心词:Hlog (write ahead log)
日志:先写入Hlog write ahead log预写日志机制Hlog落地
通过Hlog恢复
m store -> store file
吐:
新数据在MS
将经常读的数据读到BlocakCache
核心词:MS -> BlockCache(快缓存) -
第一次读从store file里读到BlockCache
第二次读从BlockCache快
BloomFilter 不容过滤器,数据定位问题
通过BloomFilter 快速判定
传统开发读写优化与HBase
https://leaf-domain.gitee.io/2024/03/07/bigdata/hbase/hbase-start/