Slava,

Answers in-line.

J-D

On Wed, Sep 17, 2008 at 2:49 PM, Slava Gorelik <[EMAIL PROTECTED]>wrote:

> Hi.Few small questions:
> 1) BatchUpdate.*getTimestamp<
> http://hadoop.apache.org/hbase/docs/current/api/org/apache/hadoop/hbase/io/BatchUpdate.html#getTimestamp()<http://hadoop.apache.org/hbase/docs/current/api/org/apache/hadoop/hbase/io/BatchUpdate.html#getTimestamp%28%29>
> >
> *() - If i understand correct, this method should return the timestamp that
> row will be committed with.
>  But how the BatchUpdate will now the timestamp ? Isn't this timestamp
> should be only known after the row is written ?
>  Any way, the value returned is always the same and not correct.


If you do not specify a timestamp, the value returned will be
HConstants.LATEST_TIMESTAMP which is Long.MAX_VALUE. HBase interprets this
as "if BU.timestamp = LATEST_TIMESTAMP, replace it with current timestamp".
The timestamp returned will be different if you created the BatchUpdate with
a specified timestamp, see my answer to your second question.


>
>
> 2) Delete Cell - i saw in the FAQ that need to add a delete record and
> commit it with exactly the same timestamp like the original
>   row, but i didn't found any commit method with timestamp.


See the BatchUpdate
constructor<http://hadoop.apache.org/hbase/docs/r0.2.1/api/org/apache/hadoop/hbase/io/BatchUpdate.html#BatchUpdate%28java.lang.String,%20long%29>that
uses a timestamp.


>
>
> 3) For my update operation i need to check if the row that my application
> holds is still contains most recent data and only in this
>   case i'll update some cells, to do this i need to lock the row -> check
> the timestamp of the particular cell -> update it if
>   timestamp is the same that application holds. All those operation, if
> they are perform on HTable will be perform by numbers of
>   RPC. I think, if it's possible to do those operation directly on
> HRegsionServer, will help me to get rid off all extra RPCs. Is
>   there some way to work with specific HRegionServer that row is belongs to
> it ? If yes - how can i get the HRegionServer for this
>   specific row.


It is best to abstract how HBase works in client or this could be a mess.
For example, you would have to reimplement the finding of a region server
for a region, with retries. Instead of updating by deleting/inserting, you
should just do a put so it will be inserted with current timestamp and, by
default, HBase retrieves the cell with the latest timestamp for a get or a
scan. How HBase works is very different from your typical RDBMS ;)


>
>
>
> Thank You and Best Regards.
> Slava.
>

Reply via email to