我正在使用 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/