hbase的table设计(翻译官网)-为完成

HBase and Schema Design
从官网翻译的,怎么设计hbase表
32 Schema Creation
hbase的schema使用hbase的shell命令和使用JavaAPI的Admin类来创建和更新。在做列簇的修改的时候,必须要是表失效(disabled),最新的貌似不用了。
java的列子,增加一个新列簇,修改一个列簇

Configuration config = HBaseConfiguration.create();
Admin admin = new Admin(conf);
TableName table = TableName.valueOf("myTable");
admin.disableTable(table);
HColumnDescriptor cf1 = ...;
admin.addColumn(table, cf1);      // adding new ColumnFamily
HColumnDescriptor cf2 = ...;
admin.modifyColumn(table, cf2);    // modifying existing ColumnFamily
admin.enableTable(table);

ps:
1在0.92.x版本中支持在线修改schme,但是在0.90.以下版本需要使hbase得表disabled时候在修改。
33 On the number of column families
Hbase现在在列簇个数大于2,3之上的应用支持的不是很好,所以要让你在应用中的schema保持的2,3三个列簇之下。当前,如果一个列簇中包含了大部分数据,在每一个region中,flushing(内存缓冲区要满了写到磁盘)和compactions(数据压缩)就会执行,而且临近的列簇也会flushed,尽管这个列簇携带的数据量很少。当许多列簇存在flushing和compaction交互的时候会产生大量的不不要的io操作(但是可以对每个列簇设置flushing和compaction,详细情况看http://hbase.apache.org/book.html#compaction以后再看)。
尽可能的保证在你的schema中只有一个列簇。当引入了2,3个列簇之后,数据接入成了列扫描,这意味着当你查询一个列簇的时候,另外一个列簇不能同时查询。
关于列簇的基数,就是每个列簇有多少条记录数。当一个表中存在许多列簇的时候,要明白列簇的基数的影响。如果列簇A拥有1百亿条记录,列簇B拥有10亿条几率,那么列簇A的数据就会被分散到许多,许多的region(还有regionservers)中。这就会导致列簇A的扫描查询会没有效率(慢)。
34 Rowkey Design
34.1 Hotsportting
在Hbase中,行是根据主键的字典顺序排序。这个设计对于扫描有优势,这样就允许你把相关的行存储在一起,或者是把一起读的数据存在一起,或者两者都行。然后糟糕的行健设置会导致一个常见的现象,数据过热。数据过热有以下常见,1绝大部分的客户端流量和一个节点交互(数据都放在一个节点里面了),2对于集群环境,数据集中在少数几个节点中。客户端流量有读数据,写数据或者其他操作。这种流量频繁访问单个节点的,甚至单个region,导致了执行力的下降(其他region空闲吧),潜在的导致了其他分区的不可使用性。这是分布式嘛,你数据都在同一个机器上,这叫什么事嘛。 数据过热也会导致相同regionserver中的其他region有不利的影响,导致无法处理请求。设计数据接入模式,使集群完全和均匀的被利用是很重要的。
为了阻止关于写操作的数据过热,设置好主键

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值