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

Benedict commented on CASSANDRA-6697:
-------------------------------------

There is another option still, that might meet all of the criteria: instead of 
providing the scope, you provide something that to the accessor looks basically 
the same, but for which the resultant function is not defined (from the POV of 
the accessor). Callers of the accessors select the correct function: for 
comparisons we could grab a thread-local instance on which we set the 
comparator we want to actually compare with, and then pass in to the accessors 
a left() and right() function that is used to populate the comparator. The 
internal logic will be dependent on the same concepts as the scope approach, 
but the correct scoping should be enforced, assuming you don't use the function 
incorrectly.

The downside is it might have slightly increased overhead. For comparisons, for 
instance, you'd probably need a special object with two child (left/right) 
objects which are passed to the accessors to wire up either side of the 
comparison. It also isn't as flexible.

A further option still (still) is to have a special accessor for the function 
we want to perform. Since most of the time we just want to avoid the cost we 
care about comparison, having a special compareTo() method, and a special 
writeTo(BB) might be enough to deal with most of the situations we'll 
encounter. It won't help us when comparing two off-heap instances, though, 
without a further specialised accessor, without which we would probably not 
eliminate much of the O( N ) garbage during merging/collation of results. 
Still, this may be the best of the options other than the current tree.



> Refactor Cell and CellName ByteBuffer accessors to avoid garbage allocation 
> where possible
> ------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-6697
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6697
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Core
>            Reporter: Benedict
>             Fix For: 2.1
>
>
> This is a prerequisite for CASSANDRA-6689.
> The basic idea is to, if unsafe is available, abuse it to modify preallocated 
> ByteBuffers so that when they are short lived they do not need to be 
> instantiated. Initially this will only be helpful for comparisons and lookups 
> on the BBs, but with some modifications to the read path we should be able to 
> reduce the need in CASSANDRA-6689 to construct BBs to pass to the native 
> protocol (thrift may have to continue as is)



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to