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

Yuki Morishita commented on CASSANDRA-4297:
-------------------------------------------

I've pushed working commit to https://github.com/yukim/cassandra/tree/4297.

When streaming compressed files, source node appends compression info to stream 
header, and dest node uses that info to decompress data from stream.
If inter-node encryption is turned on, then zero copy transfer cannot be 
performed, so in that case we fall back to current way of streaming.

I ran simple bulk loading test which transfers several compressed SSTables 
between nodes. Although overall throughput and time took to complete streaming 
is about the same, patched version reduced CPU usage (20% -> 2%) on source 
node. Most of the time was spent on source node waiting for dest node to 
decompress and write to disk.

I still don't know if this is useful in production, so if someone can perform 
more realistic tests, I'm greatly appreciated.
                
> Use java NIO as much as possible when streaming compressed SSTables
> -------------------------------------------------------------------
>
>                 Key: CASSANDRA-4297
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-4297
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Yuki Morishita
>            Assignee: Yuki Morishita
>            Priority: Minor
>              Labels: streaming
>             Fix For: 1.2
>
>
> Back in 0.8, streaming uses java NIO (FileChannel#transferTo/transferFrom) to 
> perform zero copy file transfer between nodes. Since 1.0, in order to add new 
> features like sstable compression and internode encryption we had to switch 
> to java IO Input/OutputStreams. What we currently do to transfer compressed 
> SSTable is, in source node, 1) decompress chunk in SSTable, 2) compress using 
> LZF for network, and in destination node, 3) decompress using LZF as reading 
> from socket, 4) compress for SSTable on disk.
> Now, 1.1 comes out with SSTable compression turned on by default. It is 
> reasonable to transfer compressed file as is using NIO instead of 
> decompress/compress in source node.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to