You can do this by looping over a checkAndPut operation until it succeeds.

-Mike

On Thu, May 9, 2013 at 8:52 PM, Liu, Raymond <[email protected]> wrote:
> Any suggestion?
>
>>
>> Hi
>>
>>       Say, I have four field for one record :id, status, targetid, and count.
>>       Status is on and off, target could reference other id, and count will 
>> record
>> the number of "on" status for all targetid from same id.
>>
>>       The record could be add / delete, or updated to change the status.
>>
>>       I could put count in another table, or put it in the same table, it 
>> doesn't
>> matter. As long as it can work.
>>
>>       My question is how can I ensure its correctness of the "count" field 
>> when
>> run with multiple client update the table concurrently?
>>
>>       The closet thing I can think of is checkAndPut, but I will need two 
>> steps to
>> find out the change of count, since checkAndPut etc can only test a single 
>> value
>> and with EQUAL comparator, thus I can only check upon null firstly, then on 
>> or
>> off. Thus when thing change during this two step, I need to retry from first 
>> step
>> until it succeed. This could be bad when a lot of concurrent op is on going.
>>
>>       And then, I need to update count by checkAndIncrement, though if the
>> above problem could be solved, the order of -1 +1 might not be important for
>> the final result, but in some intermediate time, it might not reflect the 
>> real
>> count of that time.
>>
>>       I know this kind of transaction is not the target of HBASE, APP should 
>> take
>> care of it, then , what's the best practice on this? Any quick simple 
>> solution for
>> my problem? Client RowLock could solve this issue, But it seems to me that 
>> it is
>> not safe and is not recommended and deprecated?
>>
>>       Btw. Is that possible or practice to implement something like PutAndGet
>> which put in new row and return the old row back to client been implemented?
>> That would help a lot for my case.
>>
>> Best Regards,
>> Raymond Liu
>

Reply via email to