数据更新可否使用insert直接覆盖

使用中发现upsert性能不是很理想,在预知已插入id的情况下,可否直接使用insert进行覆盖操作来达到更新的目的?是否会有不良影响呢,例如数据重复落盘占用空间较大或者索引重复构建额外占用硬盘空间之类的影响?

简单的说,就是无论是数据新增,或者数据更新,均使用insert进行,有没有什么问题?

insert就是覆盖 (这个keyvalue),你可以根据id自己试试。insert 不处理任何ACID,所以比upsert快很多
空间回收可以手动submit job compact,或者系统自动。

1 个赞

测得时候发现,tag整个删除后,无论是重启还是手动submit job compact,硬盘还是占用几个GB,之前以为是重复写入或者重复构建的索引占用,但看您的回答好像又不会产生这种垃圾数据,请问这个是什么原因,遗留在硬盘上的是什么内容呢?

LSMtree本身就有空间的存储放大,这样不确定是多层sst文件带来的还是哪个部分。
你可以看看rocksdb自身的LOG文件,它会告诉你目前文件排布是什么样的。