[ 
https://issues.apache.org/jira/browse/HBASE-19684?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16308832#comment-16308832
 ] 

BELUGA BEHR commented on HBASE-19684:
-------------------------------------

[~appy] All I'm doing is creating a list of 100K string with either the current 
implementation or with

{code}
for (int i = 0; i < 100000; i++) {
  // Test 1: c.add(String.format("%s_%d", a, b));
  // Test 2: c.add(a.concat("_").concat(Long.toString(b)));
  // Test 3: c.add(new StringBuilder(a.length() + 
21).append(a).append('_').append(b).toString());
  // Test 4: c.add(a + '_' + b);
}
{code}

The current code with _String.format_ takes about 320ms to complete the _concat 
implementation takes about 29ms to complete.  As you point out, the absolute 
magnitude is small, but measurable.  However, 100K items into and out of the 
cache is not that much so the savings, over time, accrues.

Please consider patch as is.

> BlockCacheKey toString Performance
> ----------------------------------
>
>                 Key: HBASE-19684
>                 URL: https://issues.apache.org/jira/browse/HBASE-19684
>             Project: HBase
>          Issue Type: Improvement
>          Components: hbase
>    Affects Versions: 3.0.0
>            Reporter: BELUGA BEHR
>            Assignee: BELUGA BEHR
>            Priority: Trivial
>         Attachments: HBASE-19684.1.patch
>
>
> {code:titile=BlockCacheKey.java}
>   @Override
>   public String toString() {
>     return String.format("%s_%d", hfileName, offset);
>   }
> {code}
> I found through bench-marking that the following code is 10x faster.
> {code:titi\le=BlockCacheKey.java}
>   @Override
>   public String toString() {
>     return hfileName.concat("_").concat(Long.toString(offset));
>   }
> {code}
> Normally it wouldn't matter for a _toString()_ method, but this is comes into 
> play because {{MemcachedBlockCache}} uses it.
> {code:title=MemcachedBlockCache.java}
>   @Override
>   public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {
>     if (buf instanceof HFileBlock) {
>       client.add(cacheKey.toString(), MAX_SIZE, (HFileBlock) buf, tc);
>     } else {
>       if (LOG.isDebugEnabled()) {
>         LOG.debug("MemcachedBlockCache can not cache Cacheable's of type "
>             + buf.getClass().toString());
>       }
>     }
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to