首页 资讯频道 互联频道 智能频道 网络 数据频道 安全频道 服务器频道 存储频道

SolidDB内存数据库评测:安装配置 Benchmark测试

2020-08-17 16:46:56 来源 : IT168网站

IBM SolidDB是一款数据管理平台,该平台将基于内存和磁盘的全事务处理数据库引擎、载体级高,可用性及强大的数据复制功能紧密地融为一体。

SolidDB集基于内存和磁盘的多线程数据库引擎于一身,以提高事务处理速度并在同一数据库内最有效地利用系统资源。SolidDB管理平台的设计可以无缝融合到需要高速、灵活以及需要不间断访问的数据管理技术解决方案中。用户既可以把表建在内存内,也可以象普通数据库一样建在磁盘上,使用非常灵活,而且具备完善的数据保护机制。

SolidDB是一个具备完整功能的关系型数据库,完全支持SQL规范以及ODBC/JDBC。SolidDB完整的功能更可以满足用户日益扩大的应用需求,同时也能帮用户节约开发时间和成本。

SolidDB在同类产品中有一些很独特的功能,如Smart Flow, Transparent Failover, Load Balance以及Universal Cache(可以加快访问 IBM DB2、IBM Informix? Dynamic Server (IDS)、Oracle、Microsoft SQL Server 和 Sybase 数据库的速)等。

Solid公司于2008年被IBM收购,SolidDB成为IBM家族的一个产品。

安装配置

1. 安装

solidDB 系统需求大约 64MB 磁盘空间,用于保存代码、文档和测试数据库。默认配置需要至少 40MB 内存,在内存中保存的每个表需要额外的空间。

solidDB 数据库的安装是通过 Java based InstallAnywhere 来进行的,因此需要 JRE 或 JDK 1.4.2 或更新的版本来运行 solidDB 安装程序。

整个安装步骤大致如下:

·如果还没有安装 Java 运行时环境(JRE)或 Java Development Kit(JDK),V1.4.2 或更新的版本,先将其安装。

·在 Windows 系统上,运行 exe 产品安装文件执行安装。在 Unix 或 Liunx 系统上,运行相应的 bin 产品安装文件执行安装。界面如图 1 所示。

·在简介屏幕上,按 Enter 键以显示许可协议。浏览并接受许可协议。输入安装目录的绝对路径,或者按 Enter 键以接受缺省值。如果安装程序无法创建此目录,那么将提示您指定另一个目录。查看安装总结。按 Enter 键以开始安装。

·如果购买了 solidDB 或 solidDB Universal Cache,请将许可证文件(solid.lic 或 soliduc.lic)从许可证证书映像复制至 solidDB 工作目录。solidDB 的缺省安装将在 solidDB 安装目录下包括一个评估许可证(solideval.lic)。评估许可证允许您在 90 天之内试用 solidDB。

·如果计划使用 solidDB JDBC 驱动程序,将所在环境的 CLASSPATH 环境变量设置为包含 solidDB JDBC 驱动程序 .jar 文件安装路径。 solidDB JDBC 驱动程序(SolidDriver2.0.jar)位于 solidDB 安装目录下的 jdbc 目录中。

图 1. 安装 solidDB

2. 配置

solidDB 从 solid.ini 文件中获取它的大多数配置信息。更确切地说,其实有两个不同的 solid.ini 配置文件,一个位于服务器上,另一个位于客户端。这两个配置文件都不是必需的。如果没有配置文件,那么将使用出厂值。这两个 solid.ini 配置文件分别包含客户端和服务器的配置参数。如果使用了 ODBC 驱动程序,那么将使用客户端配置文件,并且此文件必须在应用程序的工作目录中。

当启动 solidDB 时,它将从 solid.ini 配置文件中读取配置参数。也可以使用不带配置文件的 solidDB,这种情况下将使用缺省设置。solid.ini 配置文件指定了可帮助定制和优化 solidDB 的参数。例如,FileSpec 参数指定 solidDB 数据库文件的名称和最大大小。

另外,当启动 solidDB 时,它将检查数据库是否已经存在。如果未找到任何数据库,那么引擎会自动使用 solid.ini 配置文件中的设置来创建新的数据库。

${PageNumber}  Benchmark测试

·测试环境

本次测试使用的软硬件环境如下:

硬件配置:Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz,4核8线程,内存8GB。

操作系统: Redhat Enterprise Linux 6.0 X64。

·测试假定

本次测试为充分展示内存数据库的性能,使用SolidDB的Disk less方式,并创建内存表,使用SolidDB的sa接口完成测试。

·数据结构

create table RECORD (IDinteger, I1integer, I2integer, D1 float,D2 float, S1 VARCHAR, S2 VARCHAR, PRIMARY KEY (ID))

插入测试

1. 单线程

首先进行单线程的插入测试,向数据库中插入10000000条记录,性能如下:

线程ID 记录数 耗时(毫秒)
1 10000000 1796677
每条记录所花费的时间(微秒) 179.6677
每秒吞吐率(object/s) 5565.830697

单线程插入10000000条记录的耗时为1796秒,每条记录的花费时间为180微秒,每秒处理的记录数为0.56万。

2. 四线程

之后我们增加线程数为4.

四个线程同时插入10000000条记录,性能如下:

线程ID 记录数 耗时(毫秒)
1 2500000 491358
2 2500000 492830
3 2500000 493357
4 2500000 494972
插入10000000条记录所花费的总时间(秒) 493.12925
每条记录所花费的时间(微秒) 49.312925
每秒吞吐率(object/s) 20278.6592

四个线程插入10000000条记录的总耗时为493秒,平均每条记录耗时49.3微秒,每秒处理2万条数据。

3. 八线程

最后将线程数增加到八个线程,向数据库中添加10000000条记录,每个线程的性能和总体性能如下:

线程ID 记录数 耗时(毫秒)
1 1250000 170789
2 1250000 173127
3 1250000 173270
4 1250000 175674
5 1250000 175954
6 1250000 186918
7 1250000 187381
8 1250000 187409
插入10000000条记录所花费的总时间(秒) 178.81525
每条记录所花费的时间(微秒) 17.881525
每秒吞吐率(object/s) 55923.64186

可以看到8个并发写入10000000条记录所花费的时间大概为178.8秒,平均每秒可以添加5.6万条记录。

4. 总结

插入操作的总体吞吐率:

SolidDB内存数据库评测:Benchmark测试

可以看到,插入操作的性能,8个线程并发操作时,吞吐率最大。

${PageNumber}  更新测试

1. 单线程

首先进行单线程的更新测试,在数据库中进行10000000次更新,每次更新一条记录的所有字段,性能如下:

线程ID 记录数 耗时(毫秒)
1 10000000 2606681
每条记录所花费的时间(微秒) 260.6681
每秒吞吐率(object/s) 3836.29604

单线程更新10000000条记录的耗时为2606秒,每条记录的更新花费时间为261微秒,每秒处理的记录数为0.38万。

2. 四线程

之后我们增加线程数为4.

四个线程同时更新10000000条记录,性能如下:

线程ID 记录数 耗时(毫秒)
1 2500000 755055
2 2500000 756552
3 2500000 758577
4 2500000 760468
插入10000000条记录所花费的总时间(秒) 757.663
每条记录所花费的时间(微秒) 75.7663
每秒吞吐率(object/s) 13198.4801

四个线程更新10000000条记录的总耗时为757秒,平均每条记录耗时75.7微秒,每秒处理1.32万条数据。

3. 八线程

更新测试是通过八个线程,同时更新数据库中记录,共10000000次操作,每个线程的性能和总体性能如下:

线程ID 记录数 耗时(毫秒)
1 1250000 241278
2 1250000 241411
3 1250000 241638
4 1250000 241846
5 1250000 242336
6 1250000 242492
7 1250000 242605
8 1250000 243235
更新10000000条记录的耗时(秒) 242.105125
更新每条记录所的耗时(微秒) 24.2105125
每秒吞吐率(object/s) 41304.3714

可以看到8个并发同时更新10000000条记录所花费的时间大概为242秒,平均每秒可以更新4.1万条记录。此处的更新为涉及到了每条记录的每个字段。

4. 总结

更新操作的总体吞吐率:

SolidDB内存数据库评测:更新测试

可以看到,更新操作的性能,同样也是8个线程并发操作时,吞吐率最大。

${PageNumber}  查询测试

1. 单线程

首先进行单线程的查询测试,在数据库中进行10000000次查找,性能如下:

线程ID 记录数 耗时(毫秒)
1 10000000 1757760
每条记录所花费的时间(微秒) 175.776
每秒吞吐率(object/s) 5689.058802

单线程进行10000000次查询的耗时为1758秒,每次查询花费时间为176微秒,每秒处理的操作数为0.57万。

2. 四线程

之后我们增加线程数为4.

四个线程进行10000000次查找操作,性能如下:

线程ID 记录数 耗时(毫秒)
1 2500000 456052
2 2500000 457558
3 2500000 457776
4 2500000 467496
插入10000000条记录所花费的总时间(秒) 459.7205
每条记录所花费的时间(微秒) 45.97205
每秒吞吐率(object/s) 21752.34735

四个线程进行10000000次查找操作的总耗时为460秒,平均每条记录耗时46微秒,每秒处理2.17万次查询操作。

3. 八线程

查询测试是通过八个线程,同时查询数据库中记录,共10000000次查询,每个线程的性能和总体性能如下:

线程ID 记录数 耗时(毫秒)
1 1250000 138539
2 1250000 138930
3 1250000 138945
4 1250000 139056
5 1250000 139483
6 1250000 140850
7 1250000 141758
8 1250000 142580
查询10000000次的耗时(秒) 140.017625
每次查询的耗时(微秒) 14.0017625
每秒吞吐率(object/s) 71419.58021

可以看到8个并发同时查询10000000条记录所花费的时间大概为140秒,平均每秒可以进行7.1万次查询。

4. 总结

查询操作的总体吞吐率:

SolidDB内存数据库评测:查询测试

可以看到,查询操作的性能,同样也是4个线程并发操作时,吞吐率最大。

${PageNumber}  1:1读写测试

1. 四线程

首先进行四线程的读写测试,其中2个线程做更新操作,另外两个线程做查询操作,持续运行10秒钟,每个线程的性能和总体性能如下:

线程ID 操作 操作次数
1 查询 54175
2 查询 53892
3 更新 31654
4 更新 31501
每秒查询吞吐率(完成次数/s) 10806.7
每秒更新吞吐率(完成次数/s) 6315.5
总吞吐率(完成次数/s) 17122.2

在四个线程进行读写测试时,平均每秒可以进行1.08万次查询,0.63万次更新,总体吞吐率为1.71万。

2. 八线程

读写测试是通过八个线程,其中四个线程持续做更新操作,另外四个线程做查询操作,持续运行10秒中,每个线程的性能和总体性能如下:

线程ID 操作 操作次数
1 查询 86541
2 查询 88496
3 查询 88899
4 查询 89359
5 更新 52063
6 更新 51586
7 更新 52002
8 更新 52318
每秒查询吞吐率(完成次数/s) 35329.5
每秒更新吞吐率(完成次数/s) 20796.9
总吞吐率(完成次数/s) 56126.4

可以看到同时进行读写测试时,平均每秒可以进行3.5万次查询,2.1万次更新,总体吞吐率为5.6万。

3. 总结

1:1读写操作的总体吞吐率:

SolidDB内存数据库评测:1:1读写测试

可以看到,1:1读写操作的性能,8线程比4线程总体吞吐率高很多。

${PageNumber}  删除测试

1. 单线程

首先进行单线程的删除测试,在数据库中进行10000000次删除,每次删除一条记录,性能如下:

线程ID 记录数 耗时(毫秒)
1 10000000 2594770
每条记录所花费的时间(微秒) 259.477
每秒吞吐率(object/s) 3853.906

单线程进行10000000次删除操作的耗时为2595秒,每次查询花费时间为259.5微秒,每秒处理的操作数为0.385万。

2. 四线程

之后我们增加线程数为4.

四个线程进行10000000次删除操作,性能如下:

线程ID 记录数 耗时(毫秒)
1 2500000 642164
2 2500000 646238
3 2500000 646266
4 2500000 652727
插入10000000条记录所花费的总时间(秒) 646.8488
每条记录所花费的时间(微秒) 64.68488
每秒吞吐率(object/s) 15459.56

四个线程进行10000000次删除操作的总耗时为647秒,平均删除每条记录耗时64.7微秒,每秒处理1.55万次删除操作。

3. 八线程

删除测试是通过八个线程,按照记录ID,同时删除数据库中记录,共10000000个对象,每个线程的性能和总体性能如下:

线程ID 记录数 耗时(毫秒)
1 1250000 252805
2 1250000 262653
3 1250000 265421
4 1250000 265445
5 1250000 273086
6 1250000 273289
7 1250000 295351
8 1250000 295747
查询10000000次的耗时(秒) 272.9746
每次查询的耗时(微秒) 27.29746
每秒吞吐率(object/s) 36633.44

可以看到8个并发同时删除10000000条记录所花费的时间大概为273秒,平均每秒可以进行3.7万次删除。

4. 总结

查询操作的总体吞吐率:

可以看到,删除操作的性能,同样也是8个线程并发操作时,吞吐率最大。

以上测试都是每次操作都为一个事务,每次操作只涉及一条记录。

本文总结:

这里的测试的所有数据均是驻留在内存中,SolidDB有两种数据库引擎,同时支持内存表和磁盘表,查询和事物可以同时跨越两种类型的表,表类型对应用和用户透明,由于查询磁盘表会极大的损失性能,不能作为内存数据库的参考,故在此没有测试。双数据库引擎这种设计原想是想把冷数据和热数据分开存放,即要内存数据的性能,又要磁盘数据库稳定。在2007年,SolidDB推出了SolidDB for MySQL,2008年被IBM收购,成为了IBM数据库产品。

最近更新