Ah ha!  Thank you for the prompt and useful response :-)

The reverse timestamp key does the trick.  Thank you!

So, Filters are not run on the Client. For example, a SingleColumnValueFilter does its comparisons on the Server and is reasonably efficient. Is this correct?

P


On 1/5/12 5:23 PM, Leonardo Gamas wrote:
1) Filters are applied direct in the RegionServer:
http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/Filter.html

2) You can reverse the timestamp:
http://hbase.apache.org/book/rowkey.design.html#reverse.timestamp

So you will have the rowkey:<accountID><reverse timestamp>
In the scan you set the caching attribute to 100, so the matches will be
transfered to the client in a single trip, but you need to count the number
of times you call the next in the scanner to don't exceed the cache and
cause a new call to the regionserver.

2012/1/5 Peter Wolf<[email protected]>

Hello all,

I am a new HBase user with a familiar problem.  I need to efficiently
return the last 100 rows from an account.  I searched the archives, and
read the book, but did not find a complete answer.

I have a table of interactions with my users.  One row per interaction.

I am using a composite Row Key of the form

<accountID><timestamp>

So using partial row key scans I can efficiently get all the rows for an
account.

Unfortunately, I do not know how to relate row count to timestamp, so I
have to get all the rows.  I then use a PageFilter to get only the last 100.

However, I believe that Filters operate on the Client side, so all of the
rows get transmitted.  I believe this is not efficient.

I have two questions--

1) Am I correct that my solution is not efficient, and I need to filter at
the Server?
2) If so, is there a "best practice" for this problem?

Thanks in advance
Peter




Reply via email to