加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

从MySQL到HBase:数据存储方案转型演进

发布时间:2018-07-04 20:08:08 所属栏目:教程 来源:杨宏志
导读:【资讯】 本文大抵会从以下几个方面入手,谈谈笔者对数据存储方案选型的观点: 从MySQL到HBase集群化方案的演化 MySQL与HBase的机能弃取 差异方案的优化思绪 总结 一、集群化方案 1、MySQL应用的演化 MySQL与HBase说到最焦点的点,是一种数据存储方案。方

  按照主键查询,可以快速定位到数据地址磁盘块,只必要少少的磁盘IO即可拿到数据:通过缓存高层节点,主健查询只必要一次磁盘IO就可拿到数据;MySQL单表行数一样平常提议不会高出2万万,万万行以下的大表,B+树只需2~3层即可;

  帮助索引,提供快速定位手段:帮助索引B+树,可以快速定位到最终所需的主键ID,按照主键ID可以快速拿到所需信息。

  HBase只有局部信息,没有帮助索引

  查询会优先查找memstore,假如没有会查找Hfile(存储布局相同B+树)。假如第一个Hfile中没有所需的信息,则必要去第二、第三个Hfile中查询;假如查询的数据刚亏得memstore,第一个Hfile,HBase会优于MySQL;均匀下来,HBase读机能一样平常。镌汰Hfile数据以提速,小的HFile归并成大的HFile文件。这种存储布局叫LSM树(Log-structured merge-tree);

  假如必要检索特定的列,也许必要遍历全部Hfile,本钱巨高。

  MySQL成也B+,败也B+;HBase成也LSM,败也LSM。

  4、附录

  从MySQL到HBase:数据存储方案转型演进

  B+ 树

  查询“值为25”的节点,只必要2次定位即可。

  从MySQL到HBase:数据存储方案转型演进

  LSM树

  查询“值为25”的节点,只必要4次定位即可。

  三、优化思绪

  1、HBase优化点 (首要是读)

  异步化

  靠山线程将memstore写入Hfile;

  靠山线程完成Hfile归并;

  wal异步写入(数据有丢失的风险)。

  数据就近

  blockcache,缓存常用数据块:读哀求先到memstore中查数据,查不到就到blockcache中查,再查不到就会到磁盘上读,把最近读的信息放入blockcache,基于LRU裁减,可以镌汰磁盘读写,进步机能;

  当地化,假如Region Server刚好是HDFS的data node,Hfile会将个中一个副本放在当地;

  就近原则,假如数据没在当地,Region Server会取最近的data node中数据。

  快速检索

  基于bloomfilter过滤:

  正常检索,RegionServer会遍历全部Hfile查询所需数据。个中,必要遍历Hfile的索引块才气判定Hfile中是否有所需数据;

  BloomFiler存储HFile的择要,可以通过少少磁盘IO,快速判定当前HFile是否有所需数据:

  行缓存:快速判定Hflie是否有所必要的行,粒度较粗,存储占用少,磁盘IO少,数据较快;

  列缓存:快速判定Hfile是否有所需的列,粒度较细,但存储占用较多。

  基于timestamp过滤:

  HFile基于日记追加、归并,维护了版本信息;

  当查询1小时内提交的信息时,可以跳过只包括1小时前数据的文件。

  HFile存储布局:

  HFile存储名目

  参考链接:

  https://link.zhihu.com/?target=https%3A//blog.csdn.net/yangbutao/article/details/8394149

  从MySQL到HBase:数据存储方案转型演进

  Trailer存储整个Hfile的定位信息;

  DataIndex存储Data块的索引信息:Data存储为一组磁盘块,存储数据信息;DataIndex成果相同于B+树的非叶子节点;Data每个磁盘块中的数据按key有序,加载到内存后可以用二分查找定位;Key按行 + 列族 + 列 + 时刻戳天生,按字典序排序(最佳查询方法:最左匹配);

  MetaIndex存储Meta的索引信息,Meta存储一系列元信息;MetaIndex成果相同于B+树的非叶子节点;Meta存储bloomfiler等帮助信息。

  2、MySQL优化点(首要是写)

  查询缓存

  将SQL执行功效放入缓存。

  缓存B+高层节点

  一万万行的大表,一样平常只必要一棵3层的B+树,个中索引节点 (非叶子节点) 的巨细约20MB。完全可以思量将大部叶子节点缓存,基于主键查询只必要一次IO。

  镌汰随机写——缓冲:耽误写/批量写

  上节提到,B+树通过自增主键大量镌汰随机插入。因为帮助索引的存在,插入、修改、删除操纵,帮助索引也许引起大量的随机IO。

  插入缓冲:只是将被插入数据写入insert buffer;按期将其merge到B+树;

  修改缓冲:相同于insert buffer的思绪。

  镌汰随机读——MRR

  SELECT * FROM t WHERE key_part1 >= 1000 AND key_part1 < 2000 AND key_part2 = 10000; # 平凡操纵解析: key_part1= 1000, key_part2=1000, id = 1 select * from t where id=1 key_part1= 1001, key_part2=1000, id = 10 select * from t where id=10 ... # MRR 操纵解析: SELECT * FROM t WHERE key_part1 >= 1000 AND key_part1 < 2000 AND key_part2 = 10000; key_part1= 1000, key_part2=1000, id = 1 buffer.append(1) key_part1= 1000, key_part2=1000, id = 10 buffer.append(10) ... sort(buffer) select * from t where id in (buffer)

  索引下推

  MySQL的server处理赏罚完索引后,会将索引其余部门传给引擎层;

  引擎层按照过滤前提过滤掉无用的行,镌汰数据量,进而优化server的机能。

  3、集群化数据库的帮助索引

  InnoDB的帮助索引

  B+树全局有序,叶子节点存储的是主键。基于帮助索引定位主键,再用主键定位数据。MySQL程度切分后,没步伐跨库维持成立全局有序索引:

  单实例维护索引,损失了全局有序性;

  再做一个基于新索引分库方案,损失了帮助索引维护的事宜性。

  HBase沟通题目

  模拟InnoDB实现帮助索引,帮助索引可以做成单独的key,其value是被索引行的key;

  可以做到全局信息的维护,但没法担保事宜性。

  4、HBase异步归并带来的甜头

  TTL:基于靠山归并,TTL很轻易做;

  数据多版本支持:基于“追加”,HBase自然的可以支持多版本;

  版本数目:基于靠山归并,可以将太旧版本干掉。

  四、总结

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读