hbase使用protobuf优化表

1年前 (2020-02-27) 460次浏览 已收录 4个评论

在上一篇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);
}


                       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);//返回数组
 }
}

渣渣龙, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:hbase使用protobuf优化表
喜欢 (0)

您必须 登录 才能发表评论!

(4)个小伙伴在吐槽
  1. 我也是学计算机的
    2020-03-27 13:13
  2. 奥利给
    2020-03-28 16:54
  3. 看了那么多博客,就你的能看懂
    2020-03-28 17:20
  4. 看了那么多博客,就你的能看懂
    2020-03-28 17:45