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

Peter Schuller commented on CASSANDRA-1657:
-------------------------------------------

Depending on use-case maybe, but I don't think always. Primarily for three 
reasons:

(1) The row cache is not at all as efficient in terms of memory use. Assuming 
the premise that you really want it to be guaranteed in memory is true (rather 
than a 10% active set), the on-disk format is considerably more compact (more 
so for very small rows with very small columns, than for medium-sized cf:s with 
less keys). A nice bonus is avoiding GC pressure, and edge cases like the odd 
large row and difficulty sizing the row cache.

(2) The row-cache has a sever trade-off in terms of start-up time due to it 
being seek-bound (although for CF:s that are supposed to be in-memory anyway it 
may be mitigated by pre-heating it by streaming through it; but that feels more 
like a hack). A kernel-driven sequential pre-population is vastly preferred ;)

(3) Hopefully with future improvements in compaction (e.g. limiting maximum 
sstable size so that compaction can happen to reasonably sized chunks, thus not 
doubling memory use) an in-memory CF would stay in-memory completely during 
compaction (only incurring deferred writes). In other words, it would 
contribute significantly less to (disk i/o) compaction overhead than if the 
active set was in row cache.

I do assume that the use-case is such that optimizing for avoiding 
serialization/deserialization is not the issue here, and that the importance of 
keeping the data off disk is more important than squeezing the last bit of CPU 
efficiency out of it.

Since Cassandra is going the route of native code and embracing things like 
posix_fadvise/mincore/mlock etc anyway, it seemed like a reasonable thing to 
support. However of course if other features end up catering sufficiently to 
the same goal, the suggestion may become obsolete.

Also, I still like the stuff in CASSANDRA-1625 (specifically 
https://issues.apache.org/jira/browse/CASSANDRA-1625?focusedCommentId=12971877&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-12971877)
 which overlaps with this.


> support in-memory column families
> ---------------------------------
>
>                 Key: CASSANDRA-1657
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-1657
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Peter Schuller
>            Priority: Minor
>
> Some workloads are such that you absolutely depend on column families being 
> in-memory for performance, yet you most definitely want all the things that 
> Cassandra offers in terms of replication, consistency, durability etc.
> In order to semi-deterministically ensure acceptable performance for such 
> data, Cassandra could support in-memory column families. Such an in-memory 
> column family would imply that mlock() be used on sstables for this column 
> family. On start-up and on compaction completion, they could be mmap():ed 
> with MAP_POPULATE (Linux specific) or else just mmap():ed + mlock():ed in 
> such a way as to otherwise guarantee it is in-memory (such as userland 
> traversal of the entire file).

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to