集成TerichDB的SSDB性能测试

前言

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

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

1. 读性能

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

  • 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对比

ssdb_qps.png

经过上面的对比,咱们能够看到,只有当原生 SSDB 的专用缓存不受限制的时候(此时全部的数据都被缓存下来了,加上OS Cache,其实是有两分内存占用),性能才略好于使用 TerichDB 的 SSDB。而这种状况下,他们的内存占用状况能够看下面的对比。web

1.1.2.内存对比

ssdb_resident_memory.png

能够看到,一旦内存受限,没法加载所有的数据的时候,原生 SSDB 的随机读性能会极大地降低,这主要是频繁的块解压致使的。数据库