我有一个名为'A'的列系列表。 在运行时,我将(键值)对插入表中。 离开RowKey,在我的设计中,列限定符是MD5(键)因此,列限定符是动态创建的,单元格将包含相应的价值。
例如:每辆车都有车牌。我想在HBase中将所有表插入到一个表中。 Car A有 rowkey R1,列限定符是C1,值是A的车牌。车B有 rowkey R2 ,, 列限定符为C2,值为A的牌照,反之亦然。使用模式,执行扫描命令时, rowkey = R1,列限定符 C2中包含的单元格返回(在这种情况下,它是确定无效)?
我想问一些关于表演的问题:
使用此架构设计,扫描命令的性能是否会降低? (我想扫描桌子上的所有值)。每行都会返回所有列吗?
根据上述要求,有人能指出我设计此表的正确方法吗?
非常感谢!
答案 0 :(得分:2)
不,扫描的性能不会下降。这就是HBASE的美丽。
我处理过类似的结构和庞大的数据集,检索速度非常快。
我认为在处理这种情况时,HBASE中的不同filters会有很大帮助。
您还可以参考HBASE:Defenitive guide.中的HBASE过滤器 HBASE中的一个好的过滤器是前缀过滤器。 如果你在JAVA工作,它看起来会像这样,
Scan s = new Scan();
Filter filter = new PrefixFilter(Bytes.toBytes("car_"+i));
s.setFilter(filter);
这里不同车型的行键可以是“car_ [liscence number OR car number]”。所以,即使你想从行中提取一行,也可以在几秒钟内完成。
答案 1 :(得分:2)
有许多细粒度的细胞有时可能是你的敌人,因为行键,族和限定符(它们结合起来构成实际的"键")可能会被大量复制。这会增加数据的空间占用空间,进而影响访问速度。
如果这个问题适用于您,您可以考虑将逻辑单元合并为更大的物理多单元格#34;以几种不同的方式:
有一个OpenTSDB slide deck讨论了它如何包含类似的想法。
请注意,较新版本的HBase可能允许您使用基于trie的数据块编码。这种数据结构自然有助于消除磁盘前缀冗余,从而减少了对这些模式技巧的需求。请参阅HBASE-4676和HBASE-7162。
答案 2 :(得分:1)
HBase以稀疏格式存储数据。每个单元格都存储为“键,列族,列限定符,版本,值”扫描表只生成有值的列限定符。即使您的设计指定了在整个表中基本上唯一的列限定符,但在对表进行扫描期间,每行将只生成一个值(根据您的描述),并且不会为仅为列限定符返回无关的空值在另一行定义。
您已经为该表描述了一种设计。您可以毫不费力地实施它。设计问题需要根据用例来表达,以了解您是否选择了性能良好的设计。
答案 3 :(得分:0)
我想问一些关于表演的问题:
使用此架构设计,扫描命令的性能是否会降低? (我想扫描表格中的所有值>)。每行都会返回所有列吗?
- 醇>
根据上述要求,有人能指出我设计此表的正确方法吗?