【问题标题】:Will HBase scan over rows that do not contain families that I want returnedHBase 是否会扫描不包含我想要返回的系列的行
【发布时间】:2017-09-22 19:45:02
【问题描述】:

我正在使用 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 的事实是否会减慢扫描速度?

【问题讨论】:

    标签: java hadoop hbase crud nosql


    【解决方案1】:

    一个字回答是NO。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        它只会返回colFamA中的值

        【讨论】:

        • 我知道它只会返回 colFama,但是在执行扫描时,扫描仪会只扫描与 colFamA 关联的行,还是即使我不扫描也需要扫描与 colFamB 关联的行'不希望 colFamB 返回
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-18
        • 1970-01-01
        • 2012-11-29
        相关资源
        最近更新 更多