.NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(测试篇)

WebAppDbTest 项目测试

  • [测试工具 ltt](#测试工具 ltt)
  • 测试主机规格配置
  • [CRUD 性能测试对比](#CRUD 性能测试对比)
    • [1、ltt 工具测试](#1、ltt 工具测试)
      • [1.1、AddSingle 单条数据添加](#1.1、AddSingle 单条数据添加)
      • [1.2、AddBulk 批量数据(1000)条添加](#1.2、AddBulk 批量数据(1000)条添加)
      • [1.3、GetSingle 单条数据查询](#1.3、GetSingle 单条数据查询)
      • [1.4、GetAll 多条(1000)数据查询](#1.4、GetAll 多条(1000)数据查询)
    • 2、方法执行时间分析
      • [2.1、查看 WeatherForecast 天气预报数据](#2.1、查看 WeatherForecast 天气预报数据)
        • [2.1.1、LiteDB 数据集记录信息](#2.1.1、LiteDB 数据集记录信息)
        • [2.1.2、SQLite 数据表记录信息](#2.1.2、SQLite 数据表记录信息)
      • [2.2、显示 `LiteDB.Studio` 截图](#2.2、显示 LiteDB.Studio 截图)
      • 2.3、测试类库版本
      • 2.4、统计结果信息

测试工具 ltt

介绍

LoadTestToolbox 是一个使用 C# 开发的轻量级压测工具,基于 .NET6 版本, 和其他压测工具相比,LoadTestToolbox 安装和使用都非常简单。

LoadTestToolbox 提供了一种可靠的方式来模拟高负载情况,来确定系统的瓶颈和性能极限,并且支持以图片输出压测结果。

安装

该工具是基于 .NET6 开发,所以前提条件是宿主机环境安装了 .NET6 SDK,然后执行 cli 命令全局安装:

csharp 复制代码
dotnet tool install --global LoadTestToolbox
# or
dotnet tool install -g LoadTestToolbox

LoadTestToolbox 工具安装成功,输出如下信息:

使用方式

LoadTestToolbox 目前包含了三个工具,分别是:drill、hammer、nailgun

  • drill,周期性发起请求,测试应用的长期稳定性;
  • hammer,指定范围内递增的并发请求,测试接口的性能;
  • nailgun,发起瞬间的大量请求,来测试接口性能;

1、Drill

Drill 可以通过在更长的时间内,以间隔不断的请求,来进行测试应用的长期稳定性。

  • 命令用法式例:
bash 复制代码
ltt drill --url https://www.baidu.com/ --rps 100 --duration 10 --filename drill-jd-chart.png
  • 命令说明:

在上面的命令中,LoadTestToolbox 将每秒发出 100 个请求(以一致的 20 毫秒间隔),持续 10 秒,请求到 www.jd.com

完成后,会输出到 笛卡尔图 的测试结果,并且显示每个请求和对应的响应时间。

  • 输出结果(drill-jd-chart.png):

2、Hammer

Hammer 可以通过指定范围的并发请求,测试接口的性能,并返回每个请求的平均响应时间。

  • 命令用法式例:
bash 复制代码
ltt hammer --url http://www.jd.com --min 1 --max 100 --filename hammer-jd-chart.png
  • 命令说明:

上面的命令会同时发出 1 个请求,然后是 2 个、3 个,依此类推,最多是 100 个并发请求到 www.jd.com

  • 输出结果(hammer-jd-chart.png):

3、Nailgun

Nailgun 可以对指定的接口发起瞬间的大量请求,来测试接口性能。

  • 命令用法式例:
bash 复制代码
ltt nailgun --url http://www.jd.com/ --requests 100 --filename nailgun-jd-chart.png
  • 命令说明:

一次性发起 ·100· 个请求到 www.jd.com

  • 输出结果(nailgun-jd-chart.png):

上面就是 LoadTestToolbox 的三个(drill、hammer 、nailgun)主要工具,该工具还支持各种配置,HTTP 请求方法,请求头,请求体等。

LoadTestToolbox 项目地址:

测试主机规格配置

此处使用的腾讯电脑管家检测电脑配置,显示信息如下:

CRUD 性能测试对比

这里就列举新增数据和查询数据两种类型的操作,其他类型操作类似,感兴趣的小伙伴可自行测试。

1、ltt 工具测试

此处使用 LoadTestToolboxnailgun 方式,测试 api 接口性能:

1.1、AddSingle 单条数据添加

输入命令:

bash 复制代码
ltt nailgun --url http://localhost:8080/api/Sqlite/AddSingle --requests 100 --filename sqlite-addsingle-chart.png

ltt nailgun --url http://localhost:8080/api/LiteDb/AddSingle --requests 100 --filename litedb-addsingle-chart.png

单条数据添加,输出信息:

  • sqlite-AddSingle

  • litedb-AddSingle

1.2、AddBulk 批量数据(1000)条添加

输入命令:

bash 复制代码
ltt nailgun --url http://localhost:8080/api/Sqlite/AddBulk --requests 100 --filename sqlite-addbulk-chart.png

ltt nailgun --url http://localhost:8080/api/LiteDb/AddBulk --requests 100 --filename litedb-addbulk-chart.png

批量数据添加,输出信息:

  • sqlite-AddBulk
  • litedb-AddBulk

1.3、GetSingle 单条数据查询

输入命令:

bash 复制代码
ltt nailgun --url http://localhost:8080/api/Sqlite/GetSingle --requests 100 --filename sqlite-getsingle-chart.png

ltt nailgun --url http://localhost:8080/api/LiteDb/GetSingle --requests 100 --filename litedb-getsingle-chart.png

单条数据查询,输出信息:

  • sqlite-GetSingle
  • litedb-GetSingle

1.4、GetAll 多条(1000)数据查询

输入命令:

bash 复制代码
ltt nailgun --url http://localhost:8080/api/Sqlite/GetAll --requests 100 --filename sqlite-getall-chart.png

ltt nailgun --url http://localhost:8080/api/LiteDb/GetAll --requests 100 --filename litedb-getall-chart.png

多条数据查询,输出信息:

  • sqlite-GetAll
  • litedb-GetAll

2、方法执行时间分析

2.1、查看 WeatherForecast 天气预报数据

2.1.1、LiteDB 数据集记录信息
  • 执行 sql 语言分组查询:
sql 复制代码
SELECT *.Summary,
    COUNT(*) AS total,
    [MAX(*.TemperatureC),MIN(*.TemperatureC)] TemperatureC,
    [MAX(*.TemperatureF),MIN(*.TemperatureF)] TemperatureF
FROM WeatherForecast
WHERE Date > '2024-12-31 23:59:59'
GROUP By Summary;
  • 输出结果:
2.1.2、SQLite 数据表记录信息
  • 执行 sql 语言分组查询:
sql 复制代码
select Summary,
  	count(Id) as total,
	'[' || MAX(TemperatureC) || ',' || MIN(TemperatureC) || ']' TemperatureC,
	'[' || MAX(TemperatureF) || ',' || MIN(TemperatureF) || ']' TemperatureF
from WeatherForecast
where Date > '2024-12-31 23:59:59'
GROUP BY Summary;
  • 输出结果:

2.2、显示 LiteDB.Studio 截图

  • a1、执行 sql 语句:
sql 复制代码
SELECT $ FROM ActionExecInfo
order by ActionName;
  • a2、输出结果:
  • b1、执行 sql 语句:
sql 复制代码
SELECT  *.Database,*.ActionName,
    COUNT(*) AS total,
    [MAX(*.ExecTime),MIN(*.ExecTime)] ExecTime
FROM ActionExecInfo
GROUP By ActionName;
  • b2、输出结果:

2.3、测试类库版本

-- SQLite LiteDB
Version 3.41.2 5.0.17
Nuget Package FreeSql.Provider.Sqlite v3.2.805 LiteDB.Async v0.1.7

2.4、统计结果信息

两种数据库对应的 CRUD 方法执行信息都记录在 LiteDB 数据库中,数据集是 ActionExecInfo,数据结果统计信息如下:

db AddSingle/1 AddBulk/1000 GetSingle/1 GetAll/1000 UpdateSingle/1 UpdateBulk/30 DeleteSingle/1 DeleteBulk/30
sqlite 8641658 15284705 17047918 17099044 19176842 33778531 36320740 44810895
litedb 5076062 16464773 16745788 17053847 24372806 25277966 34729345 35131508
  • 折线统计图显示信息:
  • 柱状统计图显示信息:

说明:以上数值越小越好,执行时间单位:毫秒/ms。

操作类型后面跟的是数据行数,例如:AddSingle/1,执行单次数据添加操作,数据量1条。

相关推荐
Java探秘者3 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2301_786964363 小时前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
阿维的博客日记4 小时前
图文并茂解释水平分表,垂直分表,水平分库,垂直分库
数据库·分库分表
wrx繁星点点5 小时前
事务的四大特性(ACID)
java·开发语言·数据库
小小娥子6 小时前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
DieSnowK6 小时前
[Redis][集群][下]详细讲解
数据库·redis·分布式·缓存·集群·高可用·新手向
-XWB-6 小时前
【MySQL】数据目录迁移
数据库·mysql
老华带你飞6 小时前
公寓管理系统|SprinBoot+vue夕阳红公寓管理系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot·课程设计
我明天再来学Web渗透7 小时前
【hot100-java】【二叉树的层序遍历】
java·开发语言·数据库·sql·算法·排序算法
Data 3177 小时前
Hive数仓操作(十一)
大数据·数据库·数据仓库·hive·hadoop