在HBase中,列过滤器(例如Column name=X)与行过滤器的性能?

在HBase中,列过滤器(例如Column name=X)与行过滤器的性能?,hbase,Hbase,例如,我在hbase中有这样的数据 ROW COLUMN id-time cf:s1, cf:s2, cf:s3, cf:s4, cf:s5 id-time1 cf:s1, cf:s2, cf:s3, cf:s4, cf:s5 id-time2 cf:s1, cf:s2, cf:s3, cf:s4, cf:s5 id-time3 cf:s1, cf:s2, cf:s3, cf:s4, cf:s5 我想基于rowK

例如,我在hbase中有这样的数据

ROW             COLUMN
id-time         cf:s1, cf:s2, cf:s3, cf:s4, cf:s5
id-time1        cf:s1, cf:s2, cf:s3, cf:s4, cf:s5
id-time2        cf:s1, cf:s2, cf:s3, cf:s4, cf:s5
id-time3        cf:s1, cf:s2, cf:s3, cf:s4, cf:s5
我想基于rowKey(时间范围扫描,例如time-time3)获得cf:s3

还有一个选择,

ROW             COLUMN
id-time-s1      cf:val
id-time1-s2     cf:val
id-time1-s3     cf:val
id-time2-s3     cf:val
id-time2-s4     cf:val
id-time3-s4     cf:val
id-time3-s5     cf:val
与上面一样,我希望基于rowKey(时间范围查询)获得s3


哪一种读取性能更好?

在第一种情况下,您必须使用列过滤器进行完全扫描(您需要从每行读取s3),而在第二种情况下,您可以使用列族过滤器进行部分扫描(您可以定义开始行键-结束行键间隔)。部分扫描总是比完整扫描更有效,尤其是当您的表增长时。

例如;我想在time-time2之间获取数据。在第一种情况下,将先进行部分扫描。然后将应用列过滤器?对吗?在第二种情况下,部分扫描将直接获取数据,无需任何列过滤器。因此,读取查询的性能将比第一种情况更高。行筛选器总是首先应用。如果按行键筛选,则首先应用部分扫描,该扫描是按行进行的。稍后将应用列/列族筛选器。因此,例如,一行1在cf中具有s1、s2、s3、s4列。行2在cf中具有s55、s22、s45、s49列。所有其他行在同一列族中具有与其他行不同的列。它会影响读取性能吗?好吧,如果只有一行具有您需要的值(比如s3),您可以通过直接按键获取操作获取该行,这比扫描(甚至是部分扫描)快得多。事实上,我知道在同一列族中,每行都有不同的列,因此列族将有许多不同的列。但每行大约有10列。在HBase后端,当我想按行键时间范围扫描时,很多列会影响性能吗?