限制 TerichDB 的写速度

TerichDB 在保持超高压缩率的同时还有非常高的读性能,为此付出的代价是“压缩速度”,如果在短时间内写入大量数据,因为压缩速度慢,会导致 TerichDB 产生过多的 Frozen WritableSegment,进而影响读性能。


新版 TerichDB 增加了对写速度的限制(下称限流),从而解决该问题。默认情况下,没有限流,需要通过 dbmeta.json 设置限流:

{
 ....
  "WriteThrottleBytesPerSecond":  "2MB",
 ....
}

设置限流之后,写数据过快时,会阻塞用户线程,为此,我们增加了一个设置:

DbTablePtr dbtab = DbTable::open(...);
dbtab->setThrowOnThrottle(true);

现在,当限流发生时,会抛出一个异常,用户程序需要捕获该异常,然后可以做一些其他事情(可能需要 sleep):

try {
    dbtab->upsertRow(...);
}
catch (const WriteThrottleException& ex) {
   // do something else
}



你可能感兴趣的:(TerarkDB)