[
https://issues.apache.org/jira/browse/HBASE-1252?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12680591#action_12680591
]
Jonathan Gray commented on HBASE-1252:
--------------------------------------
Trying my best to get compiler optimizations out the way... Anyways, the binary
increment means we can do things in place down the road and also that we don't
have to care about the size of the existing value.
Current results with optimizations for larger incrementing amounts:
{code}
incrementAsLong : Incremented 100000 times by 1 in 92 ms (current value is
100000)
incrementAsBytes : Incremened 100000 times by 1 in 11 ms (current value is
100000)
incrementAsLong : Incremented 100000 times by 10 in 90 ms (current value is
1000000)
incrementAsBytes : Incremened 100000 times by 10 in 15 ms (current value is
1000000)
incrementAsLong : Incremented 100000 times by 100 in 91 ms (current value is
10000000)
incrementAsBytes : Incremened 100000 times by 100 in 47 ms (current value is
10000000)
incrementAsLong : Incremented 100000 times by 1000 in 91 ms (current value is
100000000)
incrementAsBytes : Incremened 100000 times by 1000 in 98 ms (current value is
100000000)
incrementAsLong : Incremented 100000 times by 10000 in 90 ms (current value is
1000000000)
incrementAsBytes : Incremened 100000 times by 10000 in 35 ms (current value is
1000000000)
incrementAsLong : Incremented 100000 times by 100000 in 91 ms (current value is
10000000000)
incrementAsBytes : Incremened 100000 times by 100000 in 136 ms (current value
is 10000000000)
incrementAsLong : Incremented 100000 times by 1000000 in 90 ms (current value
is 100000000000)
incrementAsBytes : Incremened 100000 times by 1000000 in 75 ms (current value
is 100000000000)
{code}
> Make atomic increment perform a binary increment
> ------------------------------------------------
>
> Key: HBASE-1252
> URL: https://issues.apache.org/jira/browse/HBASE-1252
> Project: Hadoop HBase
> Issue Type: Improvement
> Affects Versions: 0.19.0
> Reporter: Jonathan Gray
> Assignee: Jonathan Gray
> Priority: Minor
> Fix For: 0.19.1, 0.20.0
>
>
> A few issues related to recently committed HBASE-803
> - The HTable api still takes an integer amount rather than long, mismatching
> HRI.
> - Binary increments are 10 times faster for small amounts than going
> Bytes.toLong, += amount, Bytes.toBytes. Twice as fast for large amounts
> (binary incrementor just loops a bunch of single increments, though there is
> plenty of room for optimizations in my current implementation)
> - Using a binary increment means we don't have to worry about the size of the
> value. If someone wants a 16 byte value they can have it, just have to
> initialize as such. If no existing value exists, will default to long/8
> bytes. Only odd behavior will be what happens when you are at the max value,
> currently will just stay at all 11111 binary. Could actually grow the byte[]
> but then we can't do things in place. I'm okay with leaving it like that, not
> exactly sure what the current implementation would do, throw an exception or
> wrap?
> - Using binary incrementing, we can directly manipulate values in the
> memcache rather than sending updates with the same timestamp. I think we
> should hold off on doing this until HBASE-1234 goes in. We'll then have to
> deal directly with hlog. (this issue is not going to address this)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.