我有一个类似集合的表: 它由2个主要列和一个虚拟布尔非主要列组成。 该表已复制。 我在此表中进行了大量写入,并且很多时候该条目已经存在于数据库中。 条目的删除是由于TTL引起的,有时(不是那么频繁)是由于DELETE查询引起的。
将值写入此表的最有效方式是什么?
第一个选项:
只是盲目地写值。
第二个选项:
检查该值是否已存在,仅在缺少该值时才写。
第二种方法需要在每次写入之前再进行一次查找,但是可以节省数据库容量,因为它不会将不必要的写入传播到其他副本。
答案 0 :(得分:2)
我会选择选项1,然后调整压缩策略。选项2将为群集增加更多的负载,因为读取总是比写入慢,并且如果在您的情况下,当先前的数据仍处于内存状态时发生插入,则它们将被直接覆盖(因此您也可以考虑调整内存状态)
如果您具有较高的读/写比率,则可以进行分层压缩-可以针对此用例进行更优化。如果比率不是很高,请保留默认的压缩策略。
但是在任何情况下,您都需要调整压缩:
gc_grace_period
减小到可接受的值,具体取决于您可以将出现故障的节点恢复多快; tombstone_compaction_interval
(doc),也许还有unchecked_tombstone_compaction
; concurrent_compactors
和compaction_throughput_mb_per_sec
之类的内容,以执行更积极的压缩。