关闭

LevelDB、TreeDB、SQLite3性能对比测试

1118人阅读 评论(0) 收藏 举报
分类:

from : http://blog.nosqlfan.com/html/2819.html

下面性能测试对比来自LevelDB官方,由 NoSQLFan 进行翻译整理。从结果上看,这不像某些田忌赛马式的性能对比,总体来说还是比较客观全面。通过多种场景下的不同性能测试结果的对比,我们也能对这三个数据库分别擅长和适用的场合有所了解。同时对其性能调优的方法理解也有一定的帮助。

原文链接:leveldb.googlecode.com

下面是对LevelDB、TreeDBSQLite3 这几个数据库的性能对比测试,分别使用了LevelDB (revision 39) SQLite3 (version 3.7.6.3) 及 Kyoto Cabinet’s (version 1.2.67)这三个版本的数据库。

测试机器配置:six-core Intel(R) Xeon(R) CPU X5650 @ 2.67GHz, with 12288 KB of total L3 cache and 12 GB of DDR3 RAM at 1333 MHz

文件系统:测试脚本分别跑在两台机器上,其文件系统一台为ext3(磁盘为 SATA Hitachi HDS721050CLA362),一台为ext4(配备磁盘 SATA Samsung HD502HJ)

性能测试源码:

基本测试

基本测试的条件如下:

  • 每个数据库使用4GB内存
  • 数据库都处于异步写模式(LevelDB’s sync option, TreeDB’s OAUTOSYNC option, SQLite3’s synchronous options 都关闭),也就是说写操作不用等数据真正写到磁盘上才返回。
  • Key 的长度为16字节
  • Value 的长度为100字节 (这个长度才能让数据库的压缩算法能够起作用,将数据压缩至50%大小左右)
  • 顺序读写时Key值递增变化
  • 随机读时生成随机的Key值

测试结果:



结果显示,在顺序读写和随机写上,LevelDB 在性能上都遥遥领先,在随机读上面 Kyoto Cabinet 引擎稍快一些。

在几种不同策略下进行写操作测试

A. Values 为长数据(数据长度为100,000字节)

LevelDB在Value较长时性能比较低,这是由于LevelDB对每一次写操作都会至少进行两次写动作,一次是写数据文件,另一次是写日志文件。这里慢的主要原因是LevelDB在进行这些操作时对值进行了过多的Copy。

B. 批量写操作

一次写操作写1000条100字节的数据,由于TreeDB不支持批量写入,故未对其进行对比测试

上面结果是由于LevelDB数据的组织方式,导致顺序写和随机写在性能上都变化不大。

C. 同步进行写操作

  • 对 LevelDB, 设置 WriteOptions.sync = true.
  • 对 TreeDB, 将 TreeDB’s OAUTOSYNC 选项开启.
  • 对 SQLite3, 设置 “PRAGMA synchronous = FULL”.

如果你看一下ext4文件系统下的测试数据,你会发现ext3和ext4在表现上非常不同。

D. 无压缩的写操作

LevelDB 和 TreeDB 都支持相应的数据压缩算法(LevelDB 使用的是 Snappy , TreeDB 使用的是 LZO),由于SQLite不支持压缩,所以这里的测试数据只是从上面的基本测试结果copy过来的。

LevelDB开启压缩比不开启压缩效率更高,而TreeDB则相反,这可能是由于TreeDB采用的压缩算法(LZO)与LevelDB采用的压缩算法(Snappy)相比计算代价更高。

E. 使用更大内存

将每个独立库的内存增大到128MB,对LevelDB来说,其中120MB用来做 write buffer,另外8MB用来做 cache(原来是2MB的 write buffer 和2MB的cache),对SQLite来说,我们不改变其page size,还是保持为1kb,但是我们增大其page数量从4k增加到128k,对TreeDB来说,我们同样不改变其page大小,也只是增大其cache,从4MB增大到128MB。

SQLite 在采用了大内存后性能变化并不大,而 LevelDB 和 TreeDB 的随机写性能却有显著提高。LevelDB 在增大内存后性能提升的原因是其write buffer 更大,从而减少了创建的sorted file的次数。减少了磁盘IO。而 TreeDB 的性能提升原因是由于其数据库的更大部分被映射到内存中了。

在几种不同策略下进行读操作测试

A. 大的Cache空间

我们分配128MB给每个数据库,对LevelDB来说,我们分配8MB给 write buffer,120MB给cache,对另外两个数据库,由于它们不支持区分 write buffer 和cache,所以统一将 cache size设置成128MB。

从结果可以看到,增大Cache在数据库读性能上都有所提升,其中最为显著的是TreeDB,其随机读性能大幅提升。主要是由于有足够的内存使得其所有读操作都几乎是在内存中进行。

B. 无压缩的读操作

下面结果是我们对预先无压缩状态写入的100万条key为16字节、value为100字节的数据后进行的读性能测试。同样的 SQLite 由于不支持压缩,所以下面数据是直接从其基本测试上copy过来的。

结果可以看到,取消压缩对读取性能提升不是特别大,当然,如果你的数据都在内存中的话,执行解压操作也不会对性能造成太大影响。

0
0
查看评论

Sqlite3性能测试

参考:http://blog.csdn.net/majiakun1/article/details/46607163,感谢作者分享。 Sqlite3最简单的提升读写性能的方法有: 1. 关闭写同步,也就是设置synchronous。Sqlite3是一个文件数据库,所谓的设置写同步就是设置每次...
  • u011726005
  • u011726005
  • 2017-08-31 22:20
  • 329

LevelDB、TreeDB、SQLite3 性能对比

In order to test LevelDB's performance, we benchmark it against other well-established database implementations. We compare LevelDB (revision 39) ...
  • Wen_Demo
  • Wen_Demo
  • 2014-05-09 22:31
  • 1937

每天进步一点点——leveldb项目实践

leveldb是Google公司开源的高性能Key-Value数据库,在很多开源的项目中就有使用,例如:Chromium,淘宝的Tair,SSDB等。leveldb对于小数据在写入百万个之后读写性能依旧强劲,高效,因此非常适合用于存储小文件,以及一些需要持久化的索引和需要持久化的异步任务。 ...
  • cywosp
  • cywosp
  • 2014-03-08 00:48
  • 18678

sqlite3 性能测试代码

  • 2012-02-09 13:27
  • 3KB
  • 下载

Sqlite3常用的插入方法及性能测试

最近在做一个大数据量缓存重传系统的优化,其中用到的sqlite技术,把自己的学习心得整理了一下 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysq...
  • roy1261
  • roy1261
  • 2016-05-25 19:57
  • 611

leveldb学习:测试代码

leveldb中带有了大量的测试程序,凡是文件命名中带有_test的文件都是测试代码。就我的理解,阅读测试代码非常要,因为作为一个库,leveldb并不带有main函数,这也不利于我们理解leveldb的结构和流程,而测试代码相当程度上弥补了一点。并且,作为一个在校学生,我们在平时的项目中也极少考虑...
  • tmshasha
  • tmshasha
  • 2015-07-16 23:14
  • 795

leveldb之简单测试

1. 最新版下载地址https://code.google.com/p/leveldb/downloads/list 2. 放到linux系统中解压并编译,其实编译leveldb很简单,解压下载包之后进入目录直接执行make即可。编译完成之后会在当前目录生成几个文件:   &#...
  • cywosp
  • cywosp
  • 2013-09-14 18:46
  • 5923

详细了解SQLITE 优缺点 性能测试

什么是SQLITE:   SQLite是一个开源免费的数据库,一般用于嵌入系统或者小规模的应用软件开发中,你可以像使用Access一样使用它,你可以免费用于任何应用,包括商业应用,另外,它还支持各种平台和开发工具,这点是某些数据库(比如Access、DBISAM)。 SQLite...
  • hjm4702192
  • hjm4702192
  • 2012-12-11 16:20
  • 2577

linux下sqlite3插入性能测试

今天上班的时候,突发奇想,不知道sqlite3的插入性能如何,于是做了如下测试。 1. 创建空表userinfo CREATE TABLE userinfo (     "username" TEXT,    ...
  • qiuhui00
  • qiuhui00
  • 2012-02-15 16:31
  • 1418

第一个levelDB测试程序

转载地址:http://qiuqiang1985.iteye.com/blog/1255365 LevelDB是google开源的一个key-value存储引擎库,类似于开源的Lucene索引库一样。其他的软件开发者可以利用该库做二次开发,来满足定制需求。LevelDB采用日志式的写方式来提高...
  • yt_canbebetter
  • yt_canbebetter
  • 2016-05-11 10:53
  • 318
    个人资料
    • 访问:641895次
    • 积分:7542
    • 等级:
    • 排名:第3429名
    • 原创:93篇
    • 转载:362篇
    • 译文:3篇
    • 评论:73条
    文章分类
    最新评论