hbase使用protobuf优化表

首页 » HBase » hbase使用protobuf优化表

在上一篇hbase操作表的练习中,每一个用户会有100条记录,而每条记录都会记录一个rowkey,这个多余的存储显然是不行,可以使用把这100条记录当成一个对象存储到这rowkey上。

根据需求编写proto文件

package zhazhalong.hbase;
message PhoneDetail
{
    required string friph=1;
    required string length=2;
}
message dayPhoneDetail
{
    repeated PhoneDetail dayPhoneDetail=1;
}

然后通过 /usr/local/bin/protoc –java_out=/root/data/ phone.proto进行编译

此时再对表插入数据

//有十个用户,每个用户每天产生100条记录,将100条记录放到一个集合中进行存储
@Test
public void insertdb2() throws Exception{
 int ii=0;
 List<Put>puts=new ArrayList<Put>();
 for (int i=0;i<10;i++) {
  String useph="183"+(i+"");
  String rowkey=useph;//唯一标示
  //存储100条
  Phone.dayPhoneDetail.Builder dataphone = Phone.dayPhoneDetail.newBuilder();
  for (int j=0;j<100;j++) {
   System.out.println(ii++);
   String friph="150"+(i+j+"");
   String length=j+"";
   Phone.PhoneDetail.Builder phonedetail = Phone.PhoneDetail.newBuilder();
   phonedetail.setFriph(friph);
   phonedetail.setLength(length);
   dataphone.addDayPhoneDetail(phonedetail);
  }
  Put put=new Put(rowkey.getBytes());
  put.add("cf".getBytes(),"data".getBytes(),dataphone.build().toByteArray());
  puts.add(put);
 }
 //提交
 htable.put(puts);
}
hbase使用protobuf优化表


                       100条记录存到一个rowkey上

读取内容

@Test
public void getDB2() throws Exception {
 Get get=new Get("1838".getBytes());
 Result rs=htable.get(get);
 Cell cell=rs.getColumnLatestCell("cf".getBytes(), "data".getBytes());
 Phone.dayPhoneDetail dayphone=Phone.dayPhoneDetail.parseFrom(CellUtil.cloneValue(cell));
 for (PhoneDetail pd : dayphone.getDayPhoneDetailList()) {
  System.out.println(pd);//返回数组
 }
}
hbase使用protobuf优化表
分享到:
赞(0) 打赏

评论 4

评论前必须登录!

 

  1. #1

    我也是学计算机的

    渣渣辉8个月前 (03-27)
  2. #2

    奥利给

    努力8个月前 (03-28)
  3. #3

    看了那么多博客,就你的能看懂

    努力8个月前 (03-28)
  4. #4

    看了那么多博客,就你的能看懂

    hello8个月前 (03-28)

觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00