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

ASF GitHub Bot commented on PHOENIX-2417:
-----------------------------------------

Github user JamesRTaylor commented on a diff in the pull request:

    https://github.com/apache/phoenix/pull/147#discussion_r49882278
  
    --- Diff: 
phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java ---
    @@ -1003,26 +1003,16 @@ public static PTable 
createFromProto(PTableProtos.PTable table) {
           boolean isImmutableRows = table.getIsImmutableRows();
           SortedMap<byte[], GuidePostsInfo> tableGuidePosts = new 
TreeMap<byte[], GuidePostsInfo>(Bytes.BYTES_COMPARATOR);
             for (PTableProtos.PTableStats pTableStatsProto : 
table.getGuidePostsList()) {
    -            List<byte[]> value = 
Lists.newArrayListWithExpectedSize(pTableStatsProto.getValuesCount());
    -            for (int j = 0; j < pTableStatsProto.getValuesCount(); j++) {
    -                value.add(pTableStatsProto.getValues(j).toByteArray());
    -            }
    -            // No op
    -            pTableStatsProto.getGuidePostsByteCount();
    -            value = 
Lists.newArrayListWithExpectedSize(pTableStatsProto.getValuesCount());
                 PGuidePosts pGuidePosts = pTableStatsProto.getPGuidePosts();
    -            for(int j = 0; j < pGuidePosts.getGuidePostsCount(); j++) {
    -                value.add(pGuidePosts.getGuidePosts(j).toByteArray());
    -            }
                 long guidePostsByteCount = pGuidePosts.getByteCount();
                 long rowCount = pGuidePosts.getRowCount();
    -            // TODO : Not exposing MIN/MAX key outside to client 
    -            GuidePostsInfo info =
    -                    new GuidePostsInfo(guidePostsByteCount, value, 
rowCount);
    +            int maxLength = pGuidePosts.getMaxLength();
    +            int guidePostsCount = pGuidePosts.getGuidePostsCount();
    +            GuidePostsInfo info = new GuidePostsInfo(guidePostsByteCount,
    +                    new 
ImmutableBytesWritable(pGuidePosts.getGuidePosts().toByteArray()), rowCount, 
maxLength, guidePostsCount);
    --- End diff --
    
    Use new 
ImmutableBytesWritable(HBaseZeroCopyByteString.zeroCopyGetBytes(pGuidePosts.getGuidePosts()))
 here (and elsewhere) instead to prevent copying the underlying byte array.


> Compress memory used by row key byte[] of guideposts
> ----------------------------------------------------
>
>                 Key: PHOENIX-2417
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2417
>             Project: Phoenix
>          Issue Type: Sub-task
>            Reporter: James Taylor
>            Assignee: Ankit Singhal
>             Fix For: 4.7.0
>
>         Attachments: PHOENIX-2417.patch, PHOENIX-2417_encoder.diff, 
> PHOENIX-2417_v2_wip.patch
>
>
> We've found that smaller guideposts are better in terms of minimizing any 
> increase in latency for point scans. However, this increases the amount of 
> memory significantly when caching the guideposts on the client. Guidepost are 
> equidistant row keys in the form of raw byte[] which are likely to have a 
> large percentage of their leading bytes in common (as they're stored in 
> sorted order. We should use a simple compression technique to mitigate this. 
> I noticed that Apache Parquet has a run length encoding - perhaps we can use 
> that.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to