1. 选择合适的RowKey设计,补全@Test部分代码,讲数据插入至HBase数据表“phone”@Test public void insert() throws Exception { List<Put> puts = new ArrayList<>(); //模拟假设存在10个用户,每个用户产生10000条记录。 //dnum:被叫号码 length:通话时长 data:通话日期 type:主叫被叫 for (int i = 0; i < 10; i++) { String phoneNumber = getNumber("158"); for (int j = 0; j < 10000; j++) { String dnum = getNumber("177"); String length = String.valueOf(random.nextInt(100)); String = getData("2019"); String type = String.valueOf(random.nextInt(2)); } } } Random random = new Random(); public String getNumber(String str){ return str+String.format("%08d", random.nextInt(99999999)); } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); private String getData(String s){ return s+String.format("%02d%02d%02d%02d%02d",random.nextInt(12)+1,random.nextInt(31),random.nextInt(24),random.nextInt(60),random.nextInt(60)); }
时间: 2024-02-14 08:13:22 浏览: 105
HBase数据模型解析和基本的表设计分析
在HBase中,RowKey的设计是非常重要的,好的RowKey可以提高查询效率和数据压缩比。
根据数据模拟,我们可以考虑将RowKey设计为“手机号+时间戳+随机数”,其中时间戳可以精确到秒或毫秒级别,随机数可以确保同一手机号和时间戳的数据分散在不同的RegionServer中,避免数据热点问题。
补全代码如下:
```
@Test
public void insert() throws Exception {
String tableName = "phone";
Table table = HBaseUtils.getTable(tableName);
List<Put> puts = new ArrayList<>();
//模拟假设存在10个用户,每个用户产生10000条记录。
//dnum:被叫号码 length:通话时长 data:通话日期 type:主叫被叫
for (int i = 0; i < 10; i++) {
String phoneNumber = getNumber("158");
for (int j = 0; j < 10000; j++) {
String dnum = getNumber("177");
String length = String.valueOf(random.nextInt(100));
String date = getData("2019");
String type = String.valueOf(random.nextInt(2));
String rowKey = phoneNumber + "_" + sdf.format(new Date()) + "_" + random.nextInt(10000);
Put put = new Put(Bytes.toBytes(rowKey));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("dnum"), Bytes.toBytes(dnum));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("length"), Bytes.toBytes(length));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("date"), Bytes.toBytes(date));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("type"), Bytes.toBytes(type));
puts.add(put);
}
}
table.put(puts);
table.close();
}
```
需要注意的是,在实际生产环境中,需要根据数据访问模式和查询需求来设计RowKey,以达到最佳的查询效率。
阅读全文