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

Eshcar Hillel commented on HBASE-13071:
---------------------------------------

I've just attached the patch.
The default value for scanners is sync. This can be easily changed.

Addressing the issue raised by [~jonathan.lawlor]: 
The prefetch logic is the same for sync and async scanners. Therefore, async 
scanner stops RPCs if the max result size is exceeded. However, since the 
prefetch is executed in the background, it is possible that the size of the 
data inside the cache exceeds the max size set by the user (which cannot happen 
with sync scanner). 
There are ways to handle this, but this requires knowing the size of the data 
in the cache at any point and limiting the size of the data retrieved from the 
server with respect to this size. This may reduce the performance gain. 

I plan to attach a patch of the YCSB extension if anyone wants to re-run the 
experiments.


> Hbase Streaming Scan Feature
> ----------------------------
>
>                 Key: HBASE-13071
>                 URL: https://issues.apache.org/jira/browse/HBASE-13071
>             Project: HBase
>          Issue Type: New Feature
>    Affects Versions: 0.98.11
>            Reporter: Eshcar Hillel
>         Attachments: HBASE-13071-v1.patch, HBaseStreamingScanDesign.pdf, 
> HbaseStreamingScanEvaluation.pdf
>
>
> A scan operation iterates over all rows of a table or a subrange of the 
> table. The synchronous nature in which the data is served at the client side 
> hinders the speed the application traverses the data: it increases the 
> overall processing time, and may cause a great variance in the times the 
> application waits for the next piece of data.
> The scanner next() method at the client side invokes an RPC to the 
> regionserver and then stores the results in a cache. The application can 
> specify how many rows will be transmitted per RPC; by default this is set to 
> 100 rows. 
> The cache can be considered as a producer-consumer queue, where the hbase 
> client pushes the data to the queue and the application consumes it. 
> Currently this queue is synchronous, i.e., blocking. More specifically, when 
> the application consumed all the data from the cache --- so the cache is 
> empty --- the hbase client retrieves additional data from the server and 
> re-fills the cache with new data. During this time the application is blocked.
> Under the assumption that the application processing time can be balanced by 
> the time it takes to retrieve the data, an asynchronous approach can reduce 
> the time the application is waiting for data.
> We attach a design document.
> We also have a patch that is based on a private branch, and some evaluation 
> results of this code.



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

Reply via email to