集成TerichDB的SSDB性能测试

前言

目前很多互联网公司都在使用SSDB, 它是一款NoSQL的,高性能数据库,目标是替代Redis。

我们在 TerichDB 原生 API 的基础上,通过适配,实现了 LevelDB API,虽然适配层有一定的开销,但是,这可以让所有使用 LevelDB 的程序,不需要修改任何代码,只需要修改 Makefile,就可以使用 TerichDB,ssdb 就是这样的一个程序。为了方便大家编译、使用基于 TerichDB 的 ssdb,我们 fork 了 ssdb,修改了编译脚本(Makefile 和 build.sh)。

1. 读性能

数据库通过装载相同的数据源(Amazon 的 movie review 数据,总共大约9GB)

  • SSDB with TerichDB
    • Full Compact
    • 数据库压缩后的大小是2.3GB
  • SSDB with LevelDB
    • Full Compact
    • 数据库压缩后大小是3.1GB, 块尺寸32K
  • 读操作的模式是随机读
  • 通过multi-get批量操作,每次读取100个随机key
  • 操作系统内存64GB

1.1. 原生SSDB在不同缓存尺寸下的表现

  • 原生的SSDB(with LevelDB)缓存设置(该缓存是ssdb数据库内部使用的缓存)
    • 不限制缓存尺寸
    • 500MB缓存
    • 2GB缓存
  • 原始数据数据总的key value对约为 7,911,684 个(数据大小约为9.1GB)
  • 一共进行100,000次批量随机读操作(即总的读取次数约为1000万,其中有部分key可能重复)
1.1.1.QPS对比

集成TerichDB的SSDB性能测试_第1张图片

通过上面的对比,我们可以看到,只有当原生 SSDB 的专用缓存不受限制的时候(此时所有的数据都被缓存下来了,加上OS Cache,实际上是有两份内存占用),性能才略好于使用 TerichDB 的 SSDB。而这种情况下,他们的内存占用情况可以看下面的对比。

1.1.2.内存对比

集成TerichDB的SSDB性能测试_第2张图片

可以看到,一旦内存受限,无法加载全部的数据的时候,原生 SSDB 的随机读性能会极大地下降,这主要是频繁的块解压导致的。

你可能感兴趣的:(TerarkDB,Terark,C++)