gkvdb性能测试(v1.5)

gkvdb v1.5版本之后增加了binlog和事务支持,并且整合了缓存功能,整体性能得到极大提升,以下是gkvdb v1.5的性能测试报告,包括与leveldb的性能对比。

此外,本次数据库性能测试对比中去掉了boltdb,因为...实在是太难等了,具体可以参考 gkvdb v1.0性能测试报告

 

本次同样分别从100W、500W、1000W的写入、查询、删除次数及耗时,计算对应的每次操作耗时平均数,用以衡量性能,同时本次增加了gkvdb和leveldb在不同并发下的性能比较。

需要注意的是,

1、为方便测试,使用的KV数据是按照 key_xxx => value_xxx 顺序递增的,而不是使用的随机数据,因此对于leveldb来说性能会有所提高;

2、以下的时间单位为微秒(μs),1微秒(μs)=0.001毫秒(ms)=0.000001秒(s);

3、性能测试的源代码在请查看这里

测试环境

系统:Ubuntu Desktop 14.04.5 x64 LTS
芯片:Intel(R) Core(TM) i7-7700K
硬盘:Intel SSD 256G
内存:8G
软件:gkvdb v1.5

测试结果

单线程下的测试结果

性能对比:gkvdb、leveldb

包括单线程及多线程下的测试结果对比

总结:

1、gkvdb v1.5的性能比v1.0提升了不少,主要源于以下三点:

1)、增加了binlog设计,写入/删除操作只会追加到binlog中,再由异步线程执行数据同步,不会直接写入/修改到底层数据库文件中,这样便减少了IO操作,提高写入/删除效率;

2)、增加批量操作接口,先将数据在内存中打包,随后一次性写入到binlog,这样减少了IO操作次数,提高写入/删除效率;

3)、增加事务操作接口,采用了与底层数据库文件操作不同的互斥锁,便在并发请求中提高了处理效率;

2、gkvdb在与leveldb的对比中,均采用了批量操作方式,且两者的批量数及并发数保持一致,在单线程下的写入/删除效率差两者别不大,但是在并发量大的情况下gkvdb性能就明显比leveldb优异,估计主要源于gkvdb良好的锁机制设计;

3、由于底层数据库文件同步操作都被异步化了,因此本次比较中两者在算法上的性能比较不明显,因为gkvdb使用的DRH算法主要表现在非缓存模式下的磁盘操作IO性能,但是本次两者的比较集中于接口层的操作上,不过我们还是可以通过 gkvdb v1.0性能测试报告 中看到这个结果;

4、gkvdb采用的是纯go语言开发,没有使用特定性的系统功能,包括mmap,因此gkvdb的跨平台性很好,但是在读取性能上却做了一定牺牲,不过通过良好的算法和IO设计弥补了这块性能损失,因此在非缓存支持下,读取性能也非常优异。

 

 

 

Leave a Reply

Your email address will not be published.