技术开发 频道

双数据库引擎 SolidDB内存数据库评测

  【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 (ID integer, I1 integer, I2 integer, 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数据库产品。

0
相关文章