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

chenglei edited comment on PHOENIX-5494 at 11/20/19 6:54 AM:
-------------------------------------------------------------

[~kozdemir] [~larsh], thank you for the review.

[~kozdemir], I looked into the failed test  
{{ConcurrentMutationsIT.testDeleteRowAndUpsertValueAtSameTS1}} after apply
{code:java}
  else {
     scan.setRaw(false);
     scan.setMaxVersions(1);
  }
{code}
It seems that because we set the  {{scan.setRaw(false)}},  the delete marker 
cell could not be scanned, so the put takes effect. I think although we can not 
 set {{scan.setRaw(false)}}, but we can set to retrieve the latest timestamp 
cell for regular write, so I make a modification according to your suggestion:

{code:java}
        SkipScanFilter skipScanFilter = scanRanges.getSkipScanFilter();
        if(indexMetaData.getReplayWrite() != null) {
            long timestamp = 
getMaxTimestamp(dataTableMutationsWithSameRowKeyAndTimestamp);
            scan.setTimeRange(0, timestamp);
            scan.setFilter(new SkipScanFilter(skipScanFilter, true));
        } else {
            scan.setMaxVersions(1);
            scan.setFilter(skipScanFilter);
        }
{code}

The tests are passed.
I Uploaded my newest PHOENIX-5494_v5-4.x-HBase-1.4.patch


was (Author: comnetwork):
[~kozdemir] [~larsh], thank you for the review.

[~kozdemir], I looked into the failed test  
{{ConcurrentMutationsIT.testDeleteRowAndUpsertValueAtSameTS1}} after apply
{code:java}
  else {
     scan.setRaw(false);
     scan.setMaxVersions(1);
  }
{code}
It seems that because we set the  {{scan.setRaw(false)}},  the delete marker 
cell could not be scanned, so the put takes effect. I think although we can not 
 set {{scan.setRaw(false)}}, but we can set to retrieve the latest timestamp 
cell for regular write, so I make a modification according to your suggestion:

{code:java}
        SkipScanFilter skipScanFilter = scanRanges.getSkipScanFilter();
        if(indexMetaData.getReplayWrite() != null) {
            long timestamp = 
getMaxTimestamp(dataTableMutationsWithSameRowKeyAndTimestamp);
            scan.setTimeRange(0, timestamp);
            scan.setFilter(new SkipScanFilter(skipScanFilter, true));
        } else {
            scan.setMaxVersions(1);
            scan.setFilter(skipScanFilter);
        }
{code}

The tests are passed.

> Batched, mutable Index updates are unnecessarily run one-by-one
> ---------------------------------------------------------------
>
>                 Key: PHOENIX-5494
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5494
>             Project: Phoenix
>          Issue Type: Improvement
>            Reporter: Lars Hofhansl
>            Assignee: Kadir OZDEMIR
>            Priority: Major
>              Labels: performance
>         Attachments: 5494-4.x-HBase-1.5.txt, 
> PHOENIX-5494-4.x-HBase-1.4.patch, PHOENIX-5494.master.001.patch, 
> PHOENIX-5494.master.002.patch, PHOENIX-5494.master.003.patch, 
> PHOENIX-5494_v3-4.x-HBase-1.4.patch, PHOENIX-5494_v5-4.x-HBase-1.4.patch, 
> Screenshot_20191110_160243.png, Screenshot_20191110_160351.png, 
> Screenshot_20191110_161453.png
>
>          Time Spent: 2h 10m
>  Remaining Estimate: 0h
>
> I just noticed that index updates on mutable tables retrieve their deletes 
> (to invalidate the old index entry) one-by-one.
> For batches, this can be *the* major time spent during an index update. The 
> cost is mostly incured by the repeated setup (and seeking) of the new region 
> scanner (for each row).
> We can instead do a skip scan and get all updates in a single scan per region.
> (Logically that is simple, but it will require some refactoring)
> I won't be getting to this, but recording it here in case someone feels 
> inclined.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to