I want to use HBase as a BLOB store for a search engine application. For that the objects will be stored in one HBase table (~ 1B rows). Object size is typically between 1kB to 20kB.

I am concerned about my read pattern, where our typical read retrieve between tens and thousands of rows in random order. Looking at the Java API the only method to retrieve rows in random order is to issue multiple

Result = HTable.get(Get)

requests sequentially (I assume a Scanner is not a good idea since the rows are need are spread randomly across the table / regions / etc.).

My concern is that with that pattern I have one rpc call per item, which seems to be a lot of overhead, especially when I need to retrieve 100s or 1,000s of rows.

Would it not be preferable to batch up requests so that all rows requested would be grouped by region, and then send off in parallel to regions for retrieval - that way there'd be fewer RPC calls, and they could be executed in parallel, as well? As such an addition to the interface could look something like

List<Result> = HTable.get(List<Get>)

Am I making sense? Is there something that I am missing?

Thanks!
Jochen


Reply via email to