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