具有大量动态生成的列限定符的HBase性能(在列族中)
我有一个表,有一个列族叫做“a”。 在运行时,我将向表中插入(键值)对。 离开行键,在我的设计中,列限定符是MD5(键)因此,列限定符是动态创建的,单元格将包含相应的值 每辆车都有牌照。我想在HBase中将所有内容插入到一个表中。A车有行键R1,列限定符是C1,值是A的车牌号。B车有行键R2,列限定符是C2,值是A的车牌号,反之亦然。对于模式,当执行Scan命令且rowkey=R1时,列限定符C2 return中是否包含单元格(在本例中,它是确定的null) 我想问一些关于表演的问题:具有大量动态生成的列限定符的HBase性能(在列族中),hbase,schema-design,Hbase,Schema Design,我有一个表,有一个列族叫做“a”。 在运行时,我将向表中插入(键值)对。 离开行键,在我的设计中,列限定符是MD5(键)因此,列限定符是动态创建的,单元格将包含相应的值 每辆车都有牌照。我想在HBase中将所有内容插入到一个表中。A车有行键R1,列限定符是C1,值是A的车牌号。B车有行键R2,列限定符是C2,值是A的车牌号,反之亦然。对于模式,当执行Scan命令且rowkey=R1时,列限定符C2 return中是否包含单元格(在本例中,它是确定的null) 我想问一些关于表演的问题: 使用此模
多谢各位 不,扫描性能不会降低。这就是HBASE的优点 我处理过类似的结构和庞大的数据集,检索速度惊人 我认为,对于处理这种情况,HBASE中的差异将有很大帮助 您还可以从中参考有关HBASE筛选器的信息 HBASE中的一个好过滤器是前缀过滤器。 如果您在JAVA中工作,它看起来有点像这样
Scan s = new Scan();
Filter filter = new PrefixFilter(Bytes.toBytes("car_"+i));
s.setFilter(filter);
在这里,不同汽车的行键可以是“汽车号或汽车号”。因此,即使您只想从成千上万的行中提取一行,也可以在几秒钟内完成。HBase以稀疏格式存储数据。每个单元格都存储为“键、列族、列限定符、版本、值”,表上的扫描只生成有值的列限定符。即使您的设计指定的列限定符在整个表中本质上是唯一的,但在扫描表期间,每一行将只生成一个值(根据您的描述),并且对于仅在另一行上定义的列限定符,不会返回任何无关的空值
您已经描述了表的设计。您可以在没有任何其他问题的情况下实现它。设计问题需要根据用例进行措辞,以了解您是否选择了性能良好的设计。拥有许多细粒度单元有时可能是您的敌人,因为行键、族和限定符(它们组合在一起构成实际的“键”)可能会大量重复。这会增加数据的空间占用,进而影响访问速度
如果这个问题适用于你,你可以考虑用几种不同的方式将逻辑单元合并成更大的、物理的“多个单元”:
- 通过将同级字段打包到“结构”中,可以将字段成员组合到一个类中
- 通过加入具有公共限定符前缀(例如,每个MD5的前半部分)的单元,这尤其适用于前缀相似性意味着访问位置的情况