.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条。

相关推荐
uwvwko37 分钟前
BUUCTF——web刷题第一页题解
android·前端·数据库·php·web·ctf
扶尔魔ocy1 小时前
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
linux·数据库·c++·sqlite
旋风菠萝1 小时前
项目复习(1)
java·数据库·八股·八股文·复习·项目、
w23617346011 小时前
Django框架漏洞深度剖析:从漏洞原理到企业级防御实战指南——为什么你的Django项目总被黑客盯上?
数据库·django·sqlite
2302_809798322 小时前
【JavaWeb】MySQL
数据库·mysql
drowingcoder2 小时前
MySQL相关
数据库
Musennn3 小时前
MySQL刷题相关简单语法集合
数据库·mysql
Think Spatial 空间思维3 小时前
【HTTPS基础概念与原理】TLS握手过程详解
数据库·网络协议·https
laowangpython4 小时前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
mooyuan天天4 小时前
SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
数据库·web安全·sql注入·dvwa靶场·sql报错