在Cassandra可以更新到位吗?

Nip*_*dar 0 cassandra nosql cassandra-cli cassandra-2.0

我在Cassandra有一个表,我用1000个条目填充一些行(每行有10000+列).行中的条目经常更新,基本上只是一个字段(它是一个整数)用不同的值更新.列的所有其他值保持不变.我的问题是,更新是否会就地完成?Cassandra频繁更新参赛作品有多好?

MUF*_*UFC 5

首先,每次更新都是对cassandra的顺序写入,因此,就cassandra而言,无论您是更新还是写入,它对cassandra都没有任何影响.

真正的问题是你需要多快读取那些可供阅读的写入?正如@john建议的那样,首先将所有写入写入驻留在内存中的可变CQL Memtable.因此,每个更新实际上都附加为特定CQL表的memtable的新顺序条目.它同时定期写入`commitlog'(每10秒)以保持持久性.

当Memtable已满或达到comittlog的总大小时,cassandra会将所有数据刷新为不可变的Sorted String Table(SSTable).刷新之后,压缩是保留新列值的所有PK条目并删除所有先前值(更新前)的过程.

经常刷新会导致频繁顺序写入磁盘和压缩的开销,这可能会占用大量I/O并对cassandra性能产生严重影响.

就读取而言,首先cassandra将尝试从row cache(如果已启用)或从中读取memtable.如果失败没有它会去bloom filter,key cache,partition summary,partition index最后到的SSTable的顺序.当为所有列值收集数据时,其在内存中的聚合和具有最新时间戳的列值在聚合之后返回到客户端,并且row cache为该分区键进行输入.

因此,当您查询分区键时,它将扫描该特定CQL表的所有SSTable以及尚未刷新到磁盘的所有列值的memtable.