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
}