我正在寻找在rocksdb中更快地清除列族数据的方法,而又不会产生太多开销(包括压缩)。我需要清除列族,例如每5K行清除一次(通过许多write_batch()调用插入)。我需要在不到10分钟的时间内从列族中撤出数千次数据。
最初的方法是在必须清除数据时创建和删除CF。但这很昂贵,因此我评估了其他几种组合,并提到了其缺点,
1)刷新+手动压缩/通过使用自定义压缩过滤器的用户属性触发自动压缩-冲洗必须创建SST,然后通过压缩过滤器进行压缩。这涉及不必要的文件创建和开销,因为压缩必须再次读取文件。
2)刷新+删除范围内的文件-不删除L0中的文件。行数大约为5K,齐平甚至压紧不超过L0。
3)创建删除批处理-创建需要压缩才能删除的墓碑。
4)删除并创建列族-开销太大。 10K调用来删除和创建列族组合大约需要3-5s,这是不可接受的。
由于不需要数据,因此我更倾向于截断甚至是强制存储器开关,然后删除不可变对象。我不想将其作为后台工作推送,诸如switch memtable之类的东西,如DestroyImmutableMemtables()之类的调用就足够了。 我想要您的建议:)