数据蒋堂 | 用HBase做高性能键值查询?

数据蒋堂 | 用HBase做高性能键值查询?

作者:蒋步星

来源:数据蒋堂

本文共1400字,建议阅读9分钟本文与你探讨HBase做高性能键值查询的可行性。

数据蒋堂 | 用HBase做高性能键值查询?

最近碰到几家用户在使用HBase或者试图使用HBase来做高性能查询,场景也比较类似,就是从几十亿甚至上百亿记录中按键值找出相关记录来。按说,这种key-value式的数据库很适合用键值查询,HBase看起来就是个不错的选择。

然而,已经实施过的用户却反映:效果非常差!

其实,这是预料之中的结果,因为HBase根本不适合做这件事!

从实现原理上看,key-value式的数据库无非也就是按key建了索引来查找。而索引技术,无论是传统数据库用的B树还是NoSQL数据库常用的LSM树,其本质都是利用键值有序,把遍历查找变成二分(或n-分)查找,在查找性能上并没有根本差异。

LSM树的优势在于一定程度克服了B树在更新时要面对的复杂的平衡调整,并利用了硬件的特点,对于并发高频写入的操作更为擅长,在读取方面却反而有所牺牲。而对于很少更新的历史数据,用NoSQL数据库在按键值查找时,和传统关系数据库相比,并不会有优势,大概率还会有劣势。

不过,对于只要找出一条记录的情况,这个优势或劣势是察觉不到的,就算差了10倍,也不过是10毫秒和100毫秒的差别,对前端操作人员来讲都是立即响应。所以,人们一般也不容易有直观的体验。

但是,如果要找出成千上万甚至几十万行记录时,那感觉就明显了,100毫秒执行1万次就要1000秒了。上面说的用户应用效果差也是这种情况。

用键值取数时,可以通过索引直接跳到数据所在地,这样硬盘访问量非常小,所以能做到很快。而如果键值非常多时,涉及的数据到处都是,硬盘访问量就会加大很多。而且数据在外存中是按块存储的,你不可能只读取一条记录本身的数据,而要把这个记录周边的数据都读出来,多读出的内容常常比要读的数据量还大很多倍。在总共只取一条记录时,即使这样,用户体验也不会有多差(10毫秒和100毫秒的差异);而要取出很多记录时,这个多读的内容也就跟着翻倍了,用户体验也就很糟糕了。

如果这些键值是连续的,那么适当设计存储,让数据的物理存储也按键值有序,这样就不会有浪费的读取内容,性能损失也就很少。商用关系数据库一般会按插入次序存储数据,基本可以保证这一点。在存储块中会留有一部分空间应付少量改写,这样有些数据改动了也能大体保证连续性,按键值区间查找的性能也还不错。但HDFS没有改写能力,HBase在有数据改写时只能先扔到后面(LSM树也是这么设计的),这样会导致数据存储的不连续性,增加多余的读取,降低性能。

如果键值不连续(这是更常见的情况),那这种多余读就无论如何不能避免,这时候想再优化的办法就是压缩,直接减少物理存储量。但是在这方面,HBase这种key-value数据库的表现也不如人意。这些NoSQL允许同一表中不同记录有不同字段,它不象关系数据库那样对每个表有一个所有记录统一的数据结构定义,这样带来了写入的灵活性,但势必要将数据结构信息附在记录上,导致存储量加大很多,给读取造成巨大的负担。

而且,这种key-value方式也没法采用列存(严格地说,就没有列的概念),而列存+排序后可以极大提升压缩率(这个问题以后可以再专门讲)。HBase有个列族的概念,可以充当列的作用,这方面问题一定程度会有所缓解,但用起来并不方便。

总结下来,大多数key-value数据库是为了高频写入而设计的,而不是为了高速读取!用来做高性能查询完全是个方向性错误。用于键值查找都不合适,而其它非键值查询的效果就更为恶劣(以前文中也说过这个问题)。

明明不合适,为什么还有这么多人用或想用HBase来解决这个问题呢?可能是Hadoop名声太大吧,只要有大数据就会想到用Hadoop。而且,很多传统关系数据库也确实搞不定太大量的数据,数据量大到一定程度,存储都是问题,查询就无从提起了。不过,有些新的数据技术方案已经能够解决这些问题,延续了传统数据仓库的某些技术手段,比如事先确定数据结构、为读而优化的索引、列存及压缩等,再有合理的存储机制以支撑巨大数据量,这样就能得到比HBase好得多的性能体验。

专栏作者简介

数据蒋堂 | 用HBase做高性能键值查询?

润乾软件创始人、首席科学家

清华大学计算机硕士,中国大数据产业生态联盟专家委员,著有《非线性报表模型原理》等,1989年,中国首个国际奥林匹克数学竞赛团体冠军成员,个人金牌;2000年,创立润乾公司;2004年,首次在润乾报表中提出非线性报表模型,完美解决了中国式复杂报表制表难题,目前该模型已经成为报表行业的标准;2014年,经过7年开发,润乾软件发布不依赖关系代数模型的计算引擎——集算器,有效地提高了复杂结构化大数据计算的开发和运算效率;2015年,润乾软件被福布斯中文网站评为“2015福布斯中国非上市潜力企业100强”;2016、2017年,荣获中国电子信息产业发展研究院评选的“中国软件和信息服务业十大领军人物”;2017年度中国数据大工匠、数据领域专业技术讲堂《数据蒋堂》创办者。

数据蒋堂

《数据蒋堂》的作者蒋步星,从事信息系统建设和数据处理长达20多年的时间。他丰富的工程经验与深厚的理论功底相互融合、创新思想与传统观念的相互碰撞,虚拟与现实的相互交织,产生出了一篇篇的沥血之作。此连载的内容涉及从数据呈现、采集到加工计算再到存储以及挖掘等各个方面。大可观数据世界之远景、小可看技术疑难之细节。针对数据领域一些技术难点,站在研发人员的角度从浅入深,进行全方位、360度无死角深度剖析;对于一些业内观点,站在技术人员角度阐述自己的思考和理解。蒋步星还会对大数据的发展,站在业内专家角度给予预测和推断。静下心来认真研读你会发现,《数据蒋堂》的文章,有的会让用户避免重复前人走过的弯路,有的会让攻城狮面对扎心的难题茅塞顿开,有的会为初入行业的读者提供一把开启数据世界的钥匙,有的甚至会让业内专家大跌眼镜,产生思想交锋。

数据蒋堂第二年往期回顾:

数据蒋堂 | 用HBase做高性能键值查询?