marcin-krystianc commented on PR #50823:
URL: https://github.com/apache/arrow/pull/50823#issuecomment-6421824924

   Thanks for the review, @adamreeve.
   
   The slowdown in the non-dense `FLBA` path was real. In the previous version, 
`DecodePointers` decoded every value into buffered_data_ with `DecodeDense` and 
then pointed into it, so every value was copied. This is fixed, and  
`Decode(FixedLenByteArray*)` now goes through the same `GetInternal` path as 
`BYTE_ARRAY`, so it only copies values with both a prefix and a suffix. Other 
values point to their suffix in the page or to the previous value.
   
   Now, also added `ArrowOutput`, so `BYTE_ARRAY` and `FLBA DecodeArrow` no 
longer decode into a temporary `ByteArray` buffer. They append each value 
straight to the builder.
   
   <details>
   <summary> Benchmarks, main vs this PR </summary>
   
   ```
   
--------------------------------------------------------------------------------------------------------------------------------------
   Benchmark                                                                    
                                    main        PR    
   
--------------------------------------------------------------------------------------------------------------------------------------
   
BM_DeltaDecodingByteArray/max-string-length:8/batch-size:512/prefixed-percent:10
                                2231 ns    1878 ns    
   
BM_DeltaDecodingByteArray/max-string-length:8/batch-size:512/prefixed-percent:90
                                3318 ns    2849 ns    
   
BM_DeltaDecodingByteArray/max-string-length:8/batch-size:512/prefixed-percent:99
                                3399 ns    2949 ns    
   
BM_DeltaDecodingByteArray/max-string-length:8/batch-size:2048/prefixed-percent:10
                               8942 ns    6974 ns    
   
BM_DeltaDecodingByteArray/max-string-length:8/batch-size:2048/prefixed-percent:90
                              13059 ns   11140 ns    
   
BM_DeltaDecodingByteArray/max-string-length:8/batch-size:2048/prefixed-percent:99
                              13142 ns   11584 ns    
   
BM_DeltaDecodingByteArray/max-string-length:64/batch-size:512/prefixed-percent:10
                               2164 ns    1860 ns    
   
BM_DeltaDecodingByteArray/max-string-length:64/batch-size:512/prefixed-percent:90
                               3697 ns    3351 ns    
   
BM_DeltaDecodingByteArray/max-string-length:64/batch-size:512/prefixed-percent:99
                               3853 ns    3504 ns    
   
BM_DeltaDecodingByteArray/max-string-length:64/batch-size:2048/prefixed-percent:10
                              8634 ns    7586 ns    
   
BM_DeltaDecodingByteArray/max-string-length:64/batch-size:2048/prefixed-percent:90
                             14722 ns   13340 ns    
   
BM_DeltaDecodingByteArray/max-string-length:64/batch-size:2048/prefixed-percent:99
                             15734 ns   14378 ns    
   
BM_DeltaDecodingByteArray/max-string-length:1024/batch-size:512/prefixed-percent:10
                             2666 ns    2405 ns    
   
BM_DeltaDecodingByteArray/max-string-length:1024/batch-size:512/prefixed-percent:90
                             7840 ns    7474 ns    
   
BM_DeltaDecodingByteArray/max-string-length:1024/batch-size:512/prefixed-percent:99
                             8681 ns    8129 ns    
   
BM_DeltaDecodingByteArray/max-string-length:1024/batch-size:2048/prefixed-percent:10
                           10635 ns    9153 ns    
   
BM_DeltaDecodingByteArray/max-string-length:1024/batch-size:2048/prefixed-percent:90
                           37811 ns   38028 ns    
   
BM_DeltaDecodingByteArray/max-string-length:1024/batch-size:2048/prefixed-percent:99
                           41686 ns   40220 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:512/prefixed-percent:10/null-percent:0
            8048 ns    4895 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:512/prefixed-percent:10/null-percent:50
          11770 ns    7897 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:512/prefixed-percent:90/null-percent:0
            9329 ns    5591 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:512/prefixed-percent:90/null-percent:50
          12911 ns    8854 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:512/prefixed-percent:99/null-percent:0
            9195 ns    5652 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:512/prefixed-percent:99/null-percent:50
          12895 ns    8787 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:2048/prefixed-percent:10/null-percent:0
          34104 ns   18063 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:2048/prefixed-percent:10/null-percent:50
         59148 ns   32797 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:2048/prefixed-percent:90/null-percent:0
          38993 ns   21600 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:2048/prefixed-percent:90/null-percent:50
         67769 ns   39834 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:2048/prefixed-percent:99/null-percent:0
          37679 ns   23487 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:8/batch-size:2048/prefixed-percent:99/null-percent:50
         68561 ns   38294 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:512/prefixed-percent:10/null-percent:0
           8515 ns    5015 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:512/prefixed-percent:10/null-percent:50
         12169 ns    8036 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:512/prefixed-percent:90/null-percent:0
          10279 ns    5764 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:512/prefixed-percent:90/null-percent:50
         13850 ns    8990 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:512/prefixed-percent:99/null-percent:0
          10327 ns    5678 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:512/prefixed-percent:99/null-percent:50
         14653 ns    8895 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:2048/prefixed-percent:10/null-percent:0
         37757 ns   18967 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:2048/prefixed-percent:10/null-percent:50
        61876 ns   33398 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:2048/prefixed-percent:90/null-percent:0
         49373 ns   22349 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:2048/prefixed-percent:90/null-percent:50
        76974 ns   41473 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:2048/prefixed-percent:99/null-percent:0
         48556 ns   22389 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:64/batch-size:2048/prefixed-percent:99/null-percent:50
        77380 ns   40130 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:512/prefixed-percent:10/null-percent:0
        17136 ns    9301 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:512/prefixed-percent:10/null-percent:50
       19024 ns   11516 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:512/prefixed-percent:90/null-percent:0
        22772 ns   11436 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:512/prefixed-percent:90/null-percent:50
       26286 ns   13283 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:512/prefixed-percent:99/null-percent:0
        23564 ns   11990 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:512/prefixed-percent:99/null-percent:50
       26285 ns   13936 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:2048/prefixed-percent:10/null-percent:0
      101506 ns   49041 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:2048/prefixed-percent:10/null-percent:50
     112890 ns   60100 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:2048/prefixed-percent:90/null-percent:0
      127686 ns   54975 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:2048/prefixed-percent:90/null-percent:50
     141525 ns   65763 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:2048/prefixed-percent:99/null-percent:0
      129513 ns   55034 ns    
   
BM_DeltaDecodingArrowByteArray/max-string-length:1024/batch-size:2048/prefixed-percent:99/null-percent:50
     152311 ns   66980 ns    
   BM_DeltaDecodingFLBA/type-length:2/batch-size:512/prefixed-percent:10        
                                   2810 ns    1850 ns    
   BM_DeltaDecodingFLBA/type-length:2/batch-size:512/prefixed-percent:90        
                                   3591 ns    2856 ns    
   BM_DeltaDecodingFLBA/type-length:2/batch-size:512/prefixed-percent:99        
                                   3616 ns    3046 ns    
   BM_DeltaDecodingFLBA/type-length:2/batch-size:2048/prefixed-percent:10       
                                  11025 ns    6936 ns    
   BM_DeltaDecodingFLBA/type-length:2/batch-size:2048/prefixed-percent:90       
                                  15660 ns   11435 ns    
   BM_DeltaDecodingFLBA/type-length:2/batch-size:2048/prefixed-percent:99       
                                  15891 ns   11964 ns    
   BM_DeltaDecodingFLBA/type-length:16/batch-size:512/prefixed-percent:10       
                                   2823 ns    1936 ns    
   BM_DeltaDecodingFLBA/type-length:16/batch-size:512/prefixed-percent:90       
                                   4334 ns    3589 ns    
   BM_DeltaDecodingFLBA/type-length:16/batch-size:512/prefixed-percent:99       
                                   4491 ns    3764 ns    
   BM_DeltaDecodingFLBA/type-length:16/batch-size:2048/prefixed-percent:10      
                                  10575 ns    7494 ns    
   BM_DeltaDecodingFLBA/type-length:16/batch-size:2048/prefixed-percent:90      
                                  18031 ns   14942 ns    
   BM_DeltaDecodingFLBA/type-length:16/batch-size:2048/prefixed-percent:99      
                                  19600 ns   16668 ns    
   BM_DeltaDecodingDenseFLBA/type-length:2/batch-size:512/prefixed-percent:10   
                                   3144 ns    2487 ns    
   BM_DeltaDecodingDenseFLBA/type-length:2/batch-size:512/prefixed-percent:90   
                                   4104 ns    3000 ns    
   BM_DeltaDecodingDenseFLBA/type-length:2/batch-size:512/prefixed-percent:99   
                                   4256 ns    3025 ns    
   BM_DeltaDecodingDenseFLBA/type-length:2/batch-size:2048/prefixed-percent:10  
                                  12340 ns    9668 ns    
   BM_DeltaDecodingDenseFLBA/type-length:2/batch-size:2048/prefixed-percent:90  
                                  16679 ns   12125 ns    
   BM_DeltaDecodingDenseFLBA/type-length:2/batch-size:2048/prefixed-percent:99  
                                  17299 ns   12972 ns    
   BM_DeltaDecodingDenseFLBA/type-length:16/batch-size:512/prefixed-percent:10  
                                   3003 ns    2573 ns    
   BM_DeltaDecodingDenseFLBA/type-length:16/batch-size:512/prefixed-percent:90  
                                   4586 ns    3405 ns    
   BM_DeltaDecodingDenseFLBA/type-length:16/batch-size:512/prefixed-percent:99  
                                   4714 ns    3495 ns    
   BM_DeltaDecodingDenseFLBA/type-length:16/batch-size:2048/prefixed-percent:10 
                                  11964 ns    9921 ns    
   BM_DeltaDecodingDenseFLBA/type-length:16/batch-size:2048/prefixed-percent:90 
                                  19559 ns   13076 ns    
   BM_DeltaDecodingDenseFLBA/type-length:16/batch-size:2048/prefixed-percent:99 
                                  20968 ns   14261 ns    
   
   ```
   </details>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to