java - HBase 会扫描不包含我想要返回的系列的行吗

标签 java hadoop hbase crud nosql

我正在使用 HBase CDH3,并且正在设计我的 HBase 表。假设我所有的行键都经过哈希处理,并且我有 2 个列族 colFamA 和 colFamB。对于每一行,将有值存储在 colFamA 或 colFamB 中,但不会同时存储在两者中。

如果我设置一个扫描器来扫描每一行,并且我在我的扫描器中指定

Scan scan = new Scan();    
scan.addFamily(Bytes.toBytes("colFamA");
hTable.getScanner(scan);

所以我只想要 colFamA 值,而不是 colFamB 值,我的扫描仪是否仍需要扫描不包含 colFamA 数据的行(即只有 colFamB 值的行)?有 colFamB 的事实是否会减慢此扫描速度,即使我没有将其添加为要在我的扫描中返回的列?

最佳答案

一个词的答案是否定的。

稍微长一点的答案是:HBase在扫描时根本不处理不需要的家族。每个家庭实际上都存储在不同的存储中,因此很明显没有必要在未指定的家庭中搜索某些内容。如果未指定族,则扫描所有族。

更详细的解释:至少 AFAIK 用于 HBase 0.96 我看到有 RegionScanner 接口(interface)和 RegionScannerImpl 类,它是 HRegion 的成员。此扫描仪构造函数检查是否在您的 Scan 对象中指定了系列,并且其他扫描仪列表是根据系列数组(每个商店)确定的。

关于java - HBase 会扫描不包含我想要返回的系列的行吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23277853/

相关文章:

java - Spring验证@NotNull不验证

java - 为什么cql查询时间很长

java - 内部类中公共(public)无参数构造函数的 NoSuchMethodException

java - 摆脱@Autowired(删除Spring依赖)

apache - 一旦我已经在impala shell中,如何运行.sql文件?

apache - 在VM上安装时发生HBase错误

hadoop - Hadoop开发环境的数据集?

hadoop - Hadoop 中的二次排序如何工作?

mysql - 如何跨多个数据库查询数据?

hadoop - HBase create命令在shell中不产生响应