gpt4 book ai didi

cassandra - Cassandra 是否可以就地更新?

转载 作者:行者123 更新时间:2023-12-05 08:58:02 26 4
gpt4 key购买 nike

我在 Cassandra 中有一个表,其中我用 1000 多个条目填充了一些行(每行有 10000 多列)。行中的条目更新非常频繁,基本上只是一个字段(它是一个整数)被更新为不同的值。列的所有其他值保持不变。我的问题是,更新会就地完成吗? Cassandra 在频繁更新条目方面有多好?

最佳答案

首先,每次更新也是 cassandra 的顺序写入,因此,就 cassandra 而言,更新或写入对 cassandra 没有任何影响。

真正的问题是您需要以多快的速度读取这些写入以供读取?正如@john 所建议的那样,首先将所有写入写入驻留在内存中的可变 CQL Memtable。因此,对于特定的 CQL 表,每个更新本质上都是作为一个新的顺序条目附加到 memtable 中。它同时也定期写入“commitlog”(每 10 秒)以确保持久性。

当 Memtable 已满或达到 comittlog 的总大小时,cassandra 会将所有数据刷新到不可变的排序字符串表 (SSTable)。刷新后,压缩是保留新列值的所有 PK 条目并删除所有先前值(更新前)的过程。

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

就读取而言,首先 cassandra 将尝试从 行缓存(如果启用)或 memtable 读取。如果在那里失败,它将转到 bloom filterkey cachepartition summarypartition index,最后到SSTable 的顺序。当为所有列值收集数据时,它在内存中的聚合和具有最新时间戳的列值在聚合后返回给客户端,并在行缓存中为该分区键创建一个条目。

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

关于cassandra - Cassandra 是否可以就地更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27444042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com