hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ramkrishna.s.vasudevan (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-11144) Filter to support scan multiple row key ranges
Date Mon, 29 Dec 2014 05:56:14 GMT

    [ https://issues.apache.org/jira/browse/HBASE-11144?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14259862#comment-14259862
] 

ramkrishna.s.vasudevan commented on HBASE-11144:
------------------------------------------------

Patch looks great. One comment before we give some time for others to review
In filterRowKey
{code}
 if (Bytes.compareTo(buffer, offset, length, range.startRow, 0, range.startRow.length) <
0) {
      currentReturnCode = ReturnCode.SEEK_NEXT_USING_HINT;
    } else {
      currentReturnCode = ReturnCode.INCLUDE;	
    }
{code}
The getNextRangeIndex() has already checked if the range is exactly matching a startRow or
the rowKey is less than the startRow/stopRow of that current range based on the binarySearch
index. So is it is possible to use that RowKeyRange.contains() result and use that instead
of once again checking with the range's startRow to decide if we to INCLUDE or SEEK_NEXT_USING_HINT?

Suppose we have 3 ranges 10-70, 90-100, 120-150.  My row is 95.  The getNextRangeIndex() would
return 1 as the index and there we would be knowing that it is in that the range 90-100. So
can we avoid the byte comparison once again in filterRowKey?
Also pls add the filter in ScannerModel as pointed by [~brianjohnson].

> Filter to support scan multiple row key ranges
> ----------------------------------------------
>
>                 Key: HBASE-11144
>                 URL: https://issues.apache.org/jira/browse/HBASE-11144
>             Project: HBase
>          Issue Type: Improvement
>          Components: Filters
>            Reporter: Jiajia Li
>            Assignee: Jiajia Li
>         Attachments: HBASE_11144_4.patch, HBASE_11144_V5.patch, HBASE_11144_V6.patch,
HBASE_11144_V7.patch, MultiRowRangeFilter.patch, MultiRowRangeFilter2.patch, MultiRowRangeFilter3.patch
>
>
> HBase is quite efficient when scanning only one small row key range. If user needs to
specify multiple row key ranges in one scan, the typical solutions are: 1. through FilterList
which is a list of row key Filters, 2. using the SQL layer over HBase to join with two table,
such as hive, phoenix etc. However, both solutions are inefficient. Both of them can’t utilize
the range info to perform fast forwarding during scan which is quite time consuming. If the
number of ranges are quite big (e.g. millions), join is a proper solution though it is slow.
However, there are cases that user wants to specify a small number of ranges to scan (e.g.
<1000 ranges). Both solutions can’t provide satisfactory performance in such case. 
> We provide this filter (MultiRowRangeFilter) to support such use case (scan multiple
row key ranges), which can construct the row key ranges from user specified list and perform
fast-forwarding during scan. Thus, the scan will be quite efficient. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message