精通LevelDB
上QQ阅读APP看书,第一时间看更新

1.4 LevelDB的性能分析

在LevelDB的源码中,笔者写了一段用于测试LevelDB性能的代码(db_bench.cc)。经过编译后,生成用于性能测试的可执行程序db_bench。通过运行该性能测试程序,用户能直观地了解LevelDB在海量数据读写方面的性能。

可为测试程序db_bench指定相关测试参数,也可以选择默认参数。db_bench在默认的测试参数下读写百万级别的数据时,每一个数据的key占用16字节,value占用100字节(启用压缩后,value占用50字节,即压缩率为50%)。

db_bench主要针对读与写两个方面进行测试。写性能测试项具体如下。

  • Fillseq:以顺序写的方式创建一个新的数据库。
  • Fillrandom:以随机写的方式创建一个新的数据库。
  • Overwrite:以随机写的方式更新数据库中某些存在的key的数据。
  • Fillsync:每一次写操作,均将数据同步写到磁盘中才算操作完成;而对于上述3种其他的写操作,只是将需要写的数据送入操作系统的缓冲区就算成功。

读性能测试项具体如下。

  • Readrandom:以随机的方式进行查询读。
  • Readseq:按正向顺序读。
  • Readreverse:按逆向顺序读。

在终端中输入命令执行db_bench,测试程序即可进行相应的读写操作,并记录相应的性能数据。

$ ./db_bench

针对上述的几个测试项,表1-1对比了LevelDB官方发布的与笔者实际测试的结果。两者硬件测试环境不同,因而相应测试项的数据也不相同。但总体而言,可以得知LevelDB读写性能的优异。

表1-1 LevelDB测试数据

000

① LevelDB官方测试平台为CPU:4 x Intel(R)Core(TM)2 Quad CPU Q6600 @ 2.40GHz,CPUCache:4096 KB。

②笔者采用的硬盘测试平台为15寸MacBook Pro with Retina 2015(CPU:Intel Core i7 @2.2GHz:16GB内存,256GB SSD硬盘)。

此外,为了更好地测试比较LevelDB的实际性能,Google的工程师也将LevelDB与另外两种数据库(SQLite3和Kyoto TreeDB)进行了对比。经过测试证明,LevelDB相较于另外两种数据库,无论是在基本操作环境下,还是在某些特定配置环境下,均具有非常优秀的读写性能。具体测试结果,可以参见源码中的leveldb/doc/benchmark.html。