零 环境说明:
所有的数据插入的都是Key=int,Value=int,在循环中递增的.
本机NTFS的默认簇大小为4K.
本机配置仅仅影响绝对值.相对值是可比较的:
OS=WinXP SP2;RAM=1G;CPU=AMD Athlon 64 X2 Dual 5000+;Disk=160G
测试的实际数据量为:300*10000*2*sizeof(int)/1024/1024~=22.89MByte
下面所有的测试结果的单位都是秒.
编译器:
C++ builder 6.0(使用bcb编译BDB源码,形成LIB库后,直接链接到测试程序中.没有测试DLL的形式.)
BDB版本:4.6.21.NC
一 测试页尺寸对读写性能的影响:
记录数量
=300万 缓存尺寸=0M
读写\页尺寸
|
1K
|
2K
|
4K
|
8K
|
16K
|
32K
|
B+写
|
94.94
|
84.83
|
82.73
|
97.16
|
142.67
|
232.11
|
HASH写
|
346.16
|
320.41
|
288.36
|
295.19
|
599.66
|
867.03
|
B+读
|
4.22
|
4.06
|
3.86
|
3.91
|
3.80
|
3.78
|
HASH读
|
8.25
|
7.94
|
5.42
|
5.41
|
4.99
|
4.88
|
结论:页尺寸与文件系统的簇大小相同时,写入性能最佳,读取性能中等.
在0M缓存的时候,B+的性能要比HASH好得多.
二 测试cache缓存大小对读写性能的影响:
记录数量=300万 页尺寸=4K 真实数据量=22.89MByte 数据库文件大小=80M
读写\缓存
|
0M
|
10M
|
20M
|
40M
|
80M
|
160M
|
320M
|
B+写
|
85.06
|
88.66
|
133.31
|
164.81
|
15.31
|
15.34
|
15.27
|
HASH写
|
292.91
|
224.47
|
180.76
|
95.28
|
20.11
|
20.06
|
20.05
|
B+读
|
3.98
|
4.17
|
4.86
|
9.56
|
3.83
|
3.81
|
3.80
|
HASH读
|
5.53
|
5.83
|
5.83
|
8.16
|
5.20
|
5.08
|
5.16
|
记录数量=600万 页尺寸=4K 真实数据量=45.78MByte 数据库文件大小=160M
读写\缓存
|
0M
|
40M
|
80M
|
160M
|
320M
|
B+写
|
259.39
|
1198.27
|
1017.94
|
34.59
|
34.30
|
HASH写
|
1889.32
|
1279.95
|
563.12
|
40.67
|
40.89
|
B+读
|
7.89
|
14.02
|
22.84
|
7.97
|
8.03
|
HASH读
|
11.17
|
16.81
|
11.66
|
10.39
|
10.88
|
结论:
对于缓存大于数据库文件尺寸的时候,没有太多可说的,操作都在内存中,速度非常快.
对于大数据量的读取,两组对比都比较清晰的说明了一点:缓存的大小对读取记录的性能影响不是很大.
对于大数据量的写入,缓存对性能的影响就非常可观了,基本可以肯定的是,HASH库缓存越大写入速度越快.
而奇怪的是,B+库在缓存不足的时候,性能反而比0缓存时还要差很多!!
总的来说,在我的这些测试中,B+与HASH数据库的性能差异很大.
对于缓存大于物理内存的情况未做测试,估计对性能不会有好的影响,毕竟在这种情况下,效率的瓶颈都是在磁盘的IO上.
测试的核心代码如下:
#include <db_cxx.h>
#define DATABASE "access.db"
//tcount=记录数为多少万次,DbType=数据库类型,psize=页尺寸K,csize=缓存尺寸M
void run(int tcount,DBTYPE DbType,size_t psize,size_t csize)
{
remove(DATABASE);
Db db(0, 0);
db.set_errpfx("AccessExample");
db.set_pagesize(1024*psize);
db.set_cachesize(0, 1024*1024*csize, 0);
db.open(NULL, DATABASE, NULL, DbType, DB_CREATE|DB_THREAD, 0664);
int testcount=10000*tcount;
size_t tick1=GetTickCount();
for (int i=0;i<testcount;i++)
{
Dbt key(&i,sizeof(int));
Dbt data(&i,sizeof(int));
db.put(0, &key, &data, DB_NOOVERWRITE);
}
printf("插入结束 %d 万记录,全部用时:%.2f秒\r\n",tcount,(GetTickCount()-tick1)/(float)1000);
tick1=GetTickCount();
try
{
Dbc *dbcp;
db.cursor(NULL, &dbcp, 0);
Dbt key;
Dbt data;
while (dbcp->get(&key, &data, DB_NEXT) == 0)
{
key.get_data();
data.get_data();
}
dbcp->close();
printf("遍历结束 %d 万记录,全部用时:%.2f秒\r\n",tcount,(GetTickCount()-tick1)/(float)1000);
db.sync(0);
}
catch (DbException &dbe) {}
db.close(0);
}
分享到:
相关推荐
总结来说,"BerkeleyDB测试程序"是对BerkeleyDB性能的全面评估,涵盖了数据入库和读取速度两个关键方面。通过对这些操作的深入理解和优化,我们可以更好地利用BerkeleyDB的优势,提升应用的性能。在实际应用中,还...
总结,Berkeley DB的并发性能测试是对其在多线程环境下的功能和性能进行全面评估的过程,涉及到锁管理、事务处理、性能指标、日志恢复、资源消耗及稳定性等多个方面。通过深入测试,我们可以优化数据库设置,提高...
Berkeley DB是一款由Oracle公司开发的嵌入式数据库系统,被广泛应用于许多软件项目中,尤其是在需要快速、轻量级数据存储解决方案的场景下。...在升级或选择数据库版本时,可以参考这些文件进行兼容性和性能测试。
### Berkeley DB 参考资料知识点概览 #### 1. Berkeley DB —— Cursor - **1.1 Introduction** - **定义与作用**:在Berkeley DB中,游标(Cursor)是用于... - **测评目的**:对 Berkeley DB 进行全面的性能和功能...
- **25.1 测评报告**:提供Berkeley DB的性能测试结果及使用心得。 - **性能评估**:对Berkeley DB的各项性能指标进行评估。 - **使用心得**:分享使用者对于Berkeley DB的实际使用体验和建议。
1. **键值对存储**:Berkeley DB基于键值对模型,允许用户通过唯一的键来快速查找和访问相关数据。这种数据结构简单而高效,适合处理大量的非结构化和半结构化数据。 2. **事务支持**:提供了ACID(原子性、一致性...
Berkeley DB支持多种数据模型,包括键值对存储、关系型数据库以及B树等结构,这使得它能够在不同的场景下提供卓越的性能。 **安装概述与平台支持** Berkeley DB的安装过程涵盖了多个方面,包括但不限于基础环境的...
在"db.rar"这个压缩包中,包含了几个关键文件,它们揭示了如何在嵌入式系统at91rm9200上使用Berkeley DB 4.5.20进行数据库操作: 1. **mdb.c**:这可能是一个示例程序,展示了如何使用Berkeley DB的内存数据库...
### Berkeley DB性能测试规范白皮书关键知识点解析 #### 概述 《Berkeley DB:性能指标与基准测试》是一份由Oracle发布的白皮书,该文档主要关注于Oracle Berkeley DB在不同操作系统、硬件平台及配置下的性能表现...
BerkeleyDB,简称BDB,是一款开源的、高性能、轻量级的嵌入式数据库系统,广泛应用于各种分布式应用环境中,尤其在对数据存储和访问速度有高要求的场景下表现出色。在本项目中,开发者对BerkeleyDB进行了C++动态库的...
4. **操作系统组件**:部分操作系统内核组件,如文件系统的元数据,也可能采用 Berkeley DB 来提高性能。 5. **安全系统**:身份验证、访问控制列表等安全相关数据的存储也常用到 Berkeley DB。 **三、安装与使用*...
电子技术是构建任何嵌入式系统的基础,而开发板则是进行系统原型设计和测试的重要工具。 综上所述,该设计方案不仅覆盖了数据库、流媒体、文件系统和操作系统等多个技术领域,还涉及到了数据安全、检索效率和实时...
Berkeley DB JE(Java Edition)是Oracle公司提供的一款开源、高性能、嵌入式数据库系统,主要针对Java应用程序设计。它提供了键值对存储,支持事务处理、数据复制、崩溃恢复等高级特性,常用于需要快速读写大量数据...
BerkeleyDB是一个高性能的数据库,OpenLDAP需要它来存储数据。在安装OpenLDAP之前,需要先安装BerkeleyDB。 二、安装BerkeleyDB 安装BerkeleyDB需要下载BerkeleyDB的安装包,并解压缩它。然后,需要配置和安装...
- 类成员变量可能包含Berkeley DB的环境(DB_ENV)和数据库(DB)对象,这些对象的创建和关闭也是API的一部分。 5. **数据一致性与事务管理**: - **事务**:Berkeley DB支持事务,可以在API中使用事务来确保一组...
通过这些组件,开发者可以使用CMPP测试工具进行系统集成测试、性能测试以及故障排查,确保其SP系统满足中国移动的通信规范,提高服务质量。在实际使用过程中,根据测试报告调整优化系统,以达到最佳的短信发送和接收...
Oracle Berkeley DB提供了一个键值对存储模型,适用于需要快速、可靠的数据存储的应用程序,如LDAP服务器。它被广泛用于存储和管理LDAP目录服务的基础数据,因为其性能优异且易于集成。 **LDAP与Berkeley DB的结合*...
Berkeley DB是由Oracle公司开发的一个轻量级、高性能、嵌入式数据库系统,广泛应用于各种软件项目,包括操作系统内核、网络服务器和应用程序等。 在Linux环境下,`.tar.gz`是一种常见的文件打包和压缩格式。`.tar`...
- **A点**:这是应用程序首次遭受性能下降的地方,原因是当数据无法在BerkeleyDB缓存中找到时发生的。 - **B点**:进一步的性能下降发生在当数据也无法在操作系统缓存中找到时。 - **优化建议**: - **缓存优化**...
在UI测试中,可能涉及到对数据库读写性能的验证,或者对用户交互时数据库操作的响应时间的评估,因此,MFC库与Berkeley DB的协同工作对于测试结果的准确性至关重要。 然而,值得注意的是,"mfc120d.dll"是调试版本...