详细了解SQLITE 优缺点 性能测试
什么是SQLITE: SQLite是一个开源免费的数据库,一般用于嵌入系统或者小规模的应用软件开发中,你可以像使用Access一样使用它,你可以免费用于任何应用,包括商业应用,另外,它还支持各种平台和开发工具,这点是某些数据库(比如Access、DBISAM)。
SQlite3不用安装,不用配置,不用启动,关闭或者配置数据库实例。当系统崩溃后不用做任何恢复操作,再下次使用数据库的时候自动恢复。 紧凑(compactness): SQLite是被设计成轻量级,自包含的。一个头文件,一个lib库,你就可以使用关系数据库了,不用任何启动任何系统进程。一般来说,整个SQLITE库小于225KB。 可移植(Portability) 它是运行在Windows,Linux,BSD,Mac OSX和一些商用Unix系统,比如Sun的Solaris,IBM的AIX,同样,它也可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,PalmOS,Symbin和Windows CE。 最大特点:采用无数据类型,所以可以保存任何类型的数据,SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种数据类型: SQLITE的缺点: 1:SQLITE不可储存过多的数据库,它的性能发挥最好只能在存放较小的数据量情况下。不要把它当做MYSQL甚至ORACLE来使用。它只是一个200K的数据库。 2:sqlite3不像MYSQL那样使用固定日志文件,所有使用insert、update、delete的运行效率只是一般,sqlite3的一个事务,需要调用4次fsync()操作,而一般的大型数据库,如mysql只用到了2次。sqlite3对每个事务都创建一个临时文件来记录日志,这个日志创建、更新和删除竟然使用了3次fsync()!为什么不用一个固定的日志文件呢?实在难以理解设计者的思路。可能他们把重点放在"Select" 操作数据库有主要有三种途径, 1.根据ANDROID的API编的相关程序 2.SQLITE命令符形式,WINDOWS,和LINUX下都可以。 3.第三方GUI管理程序。 LevelDB、TreeDB、SQLite3性能对比测试 下面是对LevelDB、TreeDB、SQLite3这几个数据库的性能对比测试,分别使用了LevelDB (revision 39) SQLite3 (version 3.7.6.3)及 测试机器配置:six-core Intel(R) Xeon(R) CPU X5650 @ 2.67GHz,with 12288KB of total L3 cache and 12 GB of DDR3 RAM at 1333 MHz 文件系统:测试脚本分别跑在两台机器上,其文件系统一台为ext3(磁盘为 SATA HitachiHDS721050CLA362),一台为ext4(配备磁盘 SATA Samsung HD502HJ) 性能测试源码:
基本测试基本测试的条件如下:
测试结果:
在几种不同策略下进行写操作测试A. Values为长数据(数据长度为100,000字节)
LevelDB在Value较长时性能比较低,这是由于LevelDB对每一次写操作都会至少进行两次写动作,一次是写数据文件,另一次是写日志文件。这里慢的主要原因是LevelDB在进行这些操作时对值进行了过多的Copy。 B. 批量写操作一次写操作写1000条100字节的数据,由于TreeDB不支持批量写入,故未对其进行对比测试 上面结果是由于LevelDB数据的组织方式,导致顺序写和随机写在性能上都变化不大。 C. 同步进行写操作
如果你看一下ext4文件系统下的测试数据,你会发现ext3和ext4在表现上非常不同。 D. 无压缩的写操作LevelDB 和 TreeDB 都支持相应的数据压缩算法(LevelDB使用的是
LevelDB开启压缩比不开启压缩效率更高,而TreeDB则相反,这可能是由于TreeDB采用的压缩算法(LZO)与LevelDB采用的压缩算法(Snappy)相比计算代价更高。 E. 使用更大内存将每个独立库的内存增大到128MB,对LevelDB来说,其中120MB用来做 write buffer,另外8MB用来做cache(原来是2MB的 write buffer 和2MB的cache),对SQLite来说,我们不改变其pagesize,还是保持为1kb,但是我们增大其page数量从4k增加到128k,对TreeDB来说,我们同样不改变其page大小,也只是增大其cache,从4MB增大到128MB。
SQLite 在采用了大内存后性能变化并不大,而 LevelDB 和 TreeDB 的随机写性能却有显著提高。LevelDB在增大内存后性能提升的原因是其write buffer 更大,从而减少了创建的sorted file的次数。减少了磁盘IO。而TreeDB 的性能提升原因是由于其数据库的更大部分被映射到内存中了。 在几种不同策略下进行读操作测试A. 大的Cache空间我们分配128MB给每个数据库,对LevelDB来说,我们分配8MB给 writebuffer,120MB给cache,对另外两个数据库,由于它们不支持区分 write buffer 和cache,所以统一将cache size设置成128MB。
从结果可以看到,增大Cache在数据库读性能上都有所提升,其中最为显著的是TreeDB,其随机读性能大幅提升。主要是由于有足够的内存使得其所有读操作都几乎是在内存中进行。 B. 无压缩的读操作下面结果是我们对预先无压缩状态写入的100万条key为16字节、value为100字节的数据后进行的读性能测试。同样的SQLite 由于不支持压缩,所以下面数据是直接从其基本测试上copy过来的。
结果可以看到,取消压缩对读取性能提升不是特别大,当然,如果你的数据都在内存中的话,执行解压操作也不会对性能造成太大影响。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |