You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Daniel Norberg (JIRA)" <ji...@apache.org> on 2013/08/01 06:11:48 UTC

[jira] [Commented] (CASSANDRA-5664) Improve serialization in the native protocol

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

Daniel Norberg commented on CASSANDRA-5664:
-------------------------------------------

Some quick observations:

1. There's quite a bit of string encoding and object serialization going on in some of the encodedSize() methods. This means that strings/objects will be encoded/serialized twice.

2. byte[] allocation and copying in encode() should be possible to avoid when serializing strings by careful use of ChannelBuffer.toByteBuffer(), CharBuffer.wrap() and CharsetEncoder.encode().

3. It might be worth investigating if the code duplication in encode() and encodedSize() can be eliminated by e.g. having encode() operate on a higher level buffer interface with writeString()/writeValue()/etc methods (i.e. a lot of the writeXYZ() methods in CBUtil) and having a counting implementation of this interface. The counting implementation could simply sum up the size of output without performing any actual writing/encoding, while a writing implementation would perform encoding/serialization and write to a ChannelBuffer. Then encode() could be used for both calculating the size of the output buffer and the actual serialization.

                
> Improve serialization in the native protocol
> --------------------------------------------
>
>                 Key: CASSANDRA-5664
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-5664
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Sylvain Lebresne
>            Assignee: Sylvain Lebresne
>            Priority: Minor
>             Fix For: 2.0
>
>         Attachments: 0001-Rewrite-encoding-methods.txt, 0002-Avoid-copy-when-compressing-native-protocol-frames.txt
>
>
> Message serialization in the native protocol currently make a Netty's ChannelBuffers.wrappedBuffer(). The rational was to avoid copying of the values bytes when such value are biggish. This has a cost however, especially with lots of small values, and as suggested in CASSANDRA-5422, this might well be a more common scenario for Cassandra, so let's consider directly serializing in a newly allocated buffer.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira