
文章插图
图5 实时数据中心架构图
- 将前台MySQL多库多表通过同步平台,都同步到了HBase;
- 为减少后台应用层的改动,设计了一个SQL解析模块,将SQL查询转换为HBase查询;
- 支持二级索引 。
说说二级索引,HBase并不支持二级索引,对它而言只有一个索引,那就是Rowkey 。如果要按其它字段查询,那就要为这些字段建立与Rowkey的映射关系,这就是所谓的二级索引 。HBase二级索引可以通过Coprocessor在数据插入之前执行一段代码,这段代码运行在HBase服务端(Region Server),可以让这段代码负责插入二级索引 。实时数据中心的二级索引是在客户端负责插入的,并没有使用Coprocessor,主要原因是Coprocessor不容易实现索引的批量插入,而批量插入,实践证明,是提升HBase插入性能非常有效的手段 。二级索引的应用其实还有些条件,如下: - 排序
在HBase中,只有一种排序,就是按Rowkey排序,因此,在建立索引的时候,实际上就定死了将来查询结果的排序 。某个索引字段的reverse属性为true,则按这个字段倒序排序,否则正序排序 。 - 打散
单调变化的Rowkey读写压力很难均匀分布到多个Region上,而打散将会使读写均匀分布到多个Region,因此提升了读写性能 。但打散也有局限性,主要的是,经过打散的字段将无法支持范围查询 。而且,hash和reverse这两个属性是互斥的,且hash优先级高,就是说一旦设置了hash=true,则会忽略reverse这个属性 。 - 串联
另外需要特别强调的是,索引配置也影响到多表归一,作为“串联”的字段,必须建立唯一索引,如果串联字段上没有建立唯一索引,将无法完成多表归一 。 - 我们还实现了一套将SQL语句转换成HBase API的引擎,可以通过SQL语句直接操作HBase 。这里需要指出的是HSQL引擎和Hive是不同的,Hive主要用于将SQL语句转换成Hadoop的Map/Reduce任务,当然也可以转换成HBase的查询 。但Hive无法利用二级索引(HBase本来就不存在二级索引这个概念),Hive主要面向的是大批量、低频度、高延迟、顺序读的访问场景,而HSQL可以有效利用二级索引,它面向的是小批量、高频度、低延迟、随机读的访问场景 。
推荐阅读
- 帮你梳理LAMP架构
- 前后端hosts配置访问问题解决思路
- 一文带你看透数据库架构的演变过程
- 精读《从零开始做架构》
- Nginx + Tomcat + Redis 架构的负载均衡及会话保持
- 春节期间还能打到滴滴吗,春节滴滴打车放假吗
- 一位Android资深工程师对移动端架构的思考
- 程序员经常谈论的前后端分离,前后端解耦
- 阿里P7架构师面试:大型网站应用之海量数据、高并发解决方案
- 微服务架构下的分布式限流方案思考
