Keith Turner wrote:


On Wed, Apr 15, 2015 at 11:06 AM, Adam Fuchs <[email protected]
<mailto:[email protected]>> wrote:

    On Wed, Apr 15, 2015 at 10:20 AM, Keith Turner <[email protected]
    <mailto:[email protected]>> wrote:


        Random thought on revamp.  Immutable key values with enough
        primitives to make most operations efficient (avoid constant
        alloc/copy) might be something to consider for the iterator API

    So, is this a tradeoff in the performance vs. inter-iterator
    isolation space? From a performance perspective we would do best if
    we just passed around pointers to an underlying byte array (e.g.
    ByteBuffer-style), but maximum


There are performance implications to consider key/vals not being
immutable.  Currently if any iterator wants to keep a key/val to compare
it later key vals, then it has to copy it. I think some iterators do
this frequently.  I am not making the assertion that immutable would
perform better, I don't know.

    isolation would require never reusing anything returned from an
    iterator's getTopX methods. From a security perspective we need to
    be careful with how we reuse data objects (hence the need for the
    SynchronizedIterator at the top of the "system" iterators), but I
    would say we can probably relax other isolation concerns in the
    iterators in favor of performance.

    I think there's probably a bigger project here around minimizing the
    object creation, data copying, serialization, and deserialization of
    keys. We did some work that Chris McCubbin will be presenting at the
    upcoming accumulo summit around pushing key comparisons down to a
    serialized form of the key, and that made a huge impact on load
    performance. I think we could probably achieve an order of magnitude
    more throughput in the iterator tree with a major refactoring. Any
    thoughts on when we might have the appetite for such a change? If
    we're thinking about making key/values immutable then we might
    piggyback a bigger redesign on that already breaking change.


If we were to introduce an improved iterator API, i would hope we could
deprecate and still support the old API.

Strong +1



    Adam


Reply via email to