Java HBase是否会扫描不包含要返回的族的行

Java HBase是否会扫描不包含要返回的族的行,java,hadoop,hbase,crud,nosql,Java,Hadoop,Hbase,Crud,Nosql,我正在使用HBase CDH3,我正在设计我的HBase表。假设我所有的行键都是散列的,我有两个列族colFamA和colFamB。对于每一行,将有值存储在colFamA或colFamB中,但不能同时存储在两者中 如果我设置了一个扫描器来扫描每一行,并在扫描器中指定 Scan scan = new Scan(); scan.addFamily(Bytes.toBytes("colFamA"); hTable.getScanner(scan); 所以我只想要colFamA值,而不是col

我正在使用HBase CDH3,我正在设计我的HBase表。假设我所有的行键都是散列的,我有两个列族colFamA和colFamB。对于每一行,将有值存储在colFamA或colFamB中,但不能同时存储在两者中

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

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

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

它将只返回
colFamA

中的值,一个词的答案是否定的

稍长一点的回答是:HBase根本不会在扫描过程中处理不需要的族。每个族实际上都存储在不同的存储中,因此显然不需要在未指定的族中搜索某些内容。如果未指定任何族,则扫描所有族


更详细的解释:HBase 0.96至少有一个AIK,我看到有
RegionScanner
接口和
RegionScannerImpl
类,它是
HRegion
的成员。此扫描仪构造函数检查是否已将族指定到您的
扫描
对象中,并根据族数组(每个存储)确定其他扫描仪列表。

Hbase中的数据存储在区域中,每个区域将只有一个列族。当您扫描一个列族时,扫描仪将仅在与该列族相关的区域中的Hfiles中读取该列族的数据。它不会从其余列族中读取数据

我知道它只会返回colFamA,但在执行扫描时,扫描仪会只扫描与colFamA关联的行吗,还是需要扫描与colFamB关联的行,即使我不希望返回colFamB