victoriametrics是一款高性能的时许数据库,可以作为prometheus远端存储使用,以下简称vm
本文主要介绍vm在处理大规模新增时间线时的一个硬核操作。对vm有过使用经验的人应该都能发现一个问题,存的数据时间越长写入性能越差,主要是因为在写入一条数据的时候要先判断下是不是新的时间线。首先会去tsid缓存里面找一下,能找到的话就很快。找不到的时候就得去磁盘找,数据存的越多,找起来越慢。于是vm在这个过程做了个小优化,直接看代码:
这是vm1.83版本的代码,从代码可以看出来,如果一批数据里面找连续找100次都没找到的话,就不再判断存不存在了,直接当成新数据写到磁盘。如果写超过了10000次,再重新去磁盘里面找。
对于大规模新增时间线的场景,这操作确实能大大提高写入的性能。
同时这100和10000这两个值也是可以根据实际的场景来调整。