Github user paul-rogers commented on the issue:

    https://github.com/apache/drill/pull/914
  
    Regarding the use of memory addresses. The only reason to do so is 
performance. To show the benefit of using addresses, I reran the 
`PerformanceTool` class to test the original code, the code using addresses, 
and a version that uses DrillBuf as @parthchandra suggested. I expected to see 
that using addresses was a winner. That's not at all what happened.
    
    The code contains a class, `PerformanceTool` that compares the column 
writers with the original vector mutators. It loads a vector to 16 MB in size, 
repeated 300 times. The following are the run times, in ms.
    
    Vector Type | Original  | New w/Address | New w/Drillbuf
    ------------ | --------  | ------------  | ------------- 
    Required | 5703 | 4034 | 1461
    Nullable | 12743 | 3645 | 3411
    Repeated | 20430 | 7226 | 2669
    
    Here:
    
    * "Original" column uses the original int vector mutator class.
    * "New w/Address" shows the same exercise, using the version of the vector 
writers based on a direct memory address.
    * "New w/Drillbuf" shows the vector writers, but using the technique Parth 
suggested to create "unsafe" methods on the `Drillbuf` class.
    
    The test is run with a pre-allocated vector (no double-and-copy 
operations). See `PerformanceTool` for details.
    
    I have no explanation for why the `Drillbuf` version should be faster at 
all, let alone far faster; but I'll take it. The latest commit contains the 
code after this revision.
    
    So, thank you Parth, you were right again with what turned out to be an 
outstanding performance boost.


---

Reply via email to