Hi,

I am a newcomer to HBase, and I would like to ask about the behavior
of StoreScanner when scanning data. If the
`ScanQueryMatcher.compareKeyForNextColumn` receives a null ColumnHint,
the logic executed is completely the same as `compareKeyForNextRow`.
What is the benefit of doing this?

see: 
https://github.com/apache/hbase/blob/a3af60980c61fb4be31e0dcd89880f304d01098a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.java#L321

Imagine such a scenario: Block1 contains | r1/c1/t2,r1/c1/t1,
r1/c2/t2, r1/c2/t1, r1/c3/t1 |, and Block2 contains | r1/c4/t1,
r1/c5/t1 |. The read request is to scan the latest version of all
columns for all rows. Here, ScanWildcardColumnTracker is used. When
reading r1/c2/t1, since it exceeds the number of versions to be read
(having already read r1/c2/t2), ScanWildcardColumnTracker.checkVersion
will return SEEK_NEXT_COL, triggering
StoreScanner.trySkipToNextColumn, which in turn calls
ScanQueryMatcher.compareKeyForNextColumn. In this case, the ColumnHint
will obtain a null (from ScanWildcardColumnTracker). According to the
current implementation logic, it will trigger a seek operation.
However, the optimal choice is not to seek but to continue scanning.
But because StoreScanner.trySkipToNextColumn, when there is no
ColumnHint, will only compare the row key and not look at the column,
it results in an additional seek.

So I would like to ask, is this behavior as expected? In
ScanQueryMatcher.compareKeyForNextColumn, if the ColumnHint is null,
why not compare the nextIndexed and currentCell's column?

Thanks!

Best regards,
Lorin Lee

Reply via email to