首页 > 大数据 > > Hbase作者为什么允许一张表可以有多个列簇?
HBase的设计目标是海量,高吞吐存储。数据在底层是基于LSMT那一套的实现(当然分了很多region,支持分布式)。简单来说,要维护一套memstore + 可分裂的filestore的存储,差不多就是:
而这一套机制实现的单位是column family——每个column family有自己的memstore和filestore。尽管在高层上看起来是同一张表,但是表里每一个column family的存储都是相互独立的。如果和mysql比较的话,column family更像是mysql里的table,而hbase的table更像是mysql里的一个db。如果同时查询同一个hbase table的不同column family,大概等价于不同mysql table之间基于row key做了一个join。
那到底为啥要区分column family呢?
3个原因:
那么为什么一般都不建议弄很多个column family呢?因为太多了会影响性能,比如做file compact和file splict时,备选的文件会增多(记得每个column family都会增加一批文件);比如说memstore里要为每个column family分配一部分空间。毕竟我们用HBase的原因是希望他能高吞吐明显影响性能就得不偿失了。于是乎设计时就要折衷,比如上面产品详情和关注数的例子,我们是可以考虑直接拆成两个HBase table然后再进行app join的。
总之,trade off is everything
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3165731/ ,如需转载,请注明出处,否则将追究法律责任。