HBase表设计原则整理
2015-08-24 16:03
267 查看
1、列簇的设计
列簇尽量少,最好不超过3个。因为每个列簇是存在一个独立的HFile里的,flush和compaction操作都是针对一个Region进行的,当一个列簇的数据很多需要flush的时候,其它列簇即使数据很少也需要flush,这样就产生的大量不必要的io操作。
在多列簇的情况下,注意各列簇数据的数量级要一致。如果两个列簇的数量级相差太大,会使数量级少的列簇的数据扫描效率低下。
将经常查询和不经常查询的数据放到不同的列簇。
因为列簇和列的名字会存在HBase的每个Cell中,所以他们的名字应该尽可能的短。比如,用f:q代替mycolumnfamily:mycolumnqualifier
2、rowkey的设计
避免使用递增的数字或时间做为rowkey。
如果rowkey是整型,用二进制的方式比用string来存储更节约空间
合理的控制rowkey的长度,尽可能短,因为rowkey的数据也会存在每个Cell中。
如果需要将表预分裂为多个region是,最好自定义分裂的规则。
参考文献:
http://www-01.ibm.com/support/knowledgecenter/SSPT3X_2.1.2/com.ibm.swg.im.infosphere.biginsights.analyze.doc/doc/bigsql_designhints.html http://hbase.apache.org/book/number.of.cfs.html http://hbase.apache.org/book/columnfamily.html
列簇尽量少,最好不超过3个。因为每个列簇是存在一个独立的HFile里的,flush和compaction操作都是针对一个Region进行的,当一个列簇的数据很多需要flush的时候,其它列簇即使数据很少也需要flush,这样就产生的大量不必要的io操作。
在多列簇的情况下,注意各列簇数据的数量级要一致。如果两个列簇的数量级相差太大,会使数量级少的列簇的数据扫描效率低下。
将经常查询和不经常查询的数据放到不同的列簇。
因为列簇和列的名字会存在HBase的每个Cell中,所以他们的名字应该尽可能的短。比如,用f:q代替mycolumnfamily:mycolumnqualifier
2、rowkey的设计
避免使用递增的数字或时间做为rowkey。
如果rowkey是整型,用二进制的方式比用string来存储更节约空间
合理的控制rowkey的长度,尽可能短,因为rowkey的数据也会存在每个Cell中。
如果需要将表预分裂为多个region是,最好自定义分裂的规则。
参考文献:
http://www-01.ibm.com/support/knowledgecenter/SSPT3X_2.1.2/com.ibm.swg.im.infosphere.biginsights.analyze.doc/doc/bigsql_designhints.html http://hbase.apache.org/book/number.of.cfs.html http://hbase.apache.org/book/columnfamily.html
相关文章推荐
- 解析PSNR和SSIM
- HDU 3038 How Many Answers Are Wrong(带权并查集)
- hdoj 3488 Tour 【最小费用最大流】【KM算法】
- 使用ServletContext对象统计网站的访问量
- android ViewPager滑动欢迎界面
- 线程安全的方式引发事件
- POJ 3020 Antenna Placement 匈牙利算法,最大流解法 难度:1
- firefox HackBar组件模拟请求POST请求
- Coding 两步认证技术介绍
- 解决Fetching android sdk component information加载过久问题
- java中观察者模式
- 递归分析和分治算法
- 小试随机森林(random forest)算法ml
- 信任
- [python] 爬取网站所有的URL
- Cache
- ElasticSearch+LogStash+Kibana+Redis搭建日志管理服务
- Android layer-list 圆角阴影背景
- Gearman介绍、调研、测试与原理分析
- STL学习----入门(1)[iterator]