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

WebAppDbTest 项目测试

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

  • 测试项目 WebAppDbTest 地址,https://gitee.com/dolayout/sample/tree/master/code/Sample.WebAppDbTest

测试工具 ltt

介绍

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

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

安装

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

dotnet tool install --global LoadTestToolbox
# or
dotnet tool install -g LoadTestToolbox

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

LoadTestToolbox

使用方式

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

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

1、Drill

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

  • 命令用法式例:
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

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

jd-chart

2、Hammer

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

  • 命令用法式例:
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

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

hammer-jd-chart

3、Nailgun

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

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

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

nailgun-jd-chart

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

nailgun-jd-chart.png

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

LoadTestToolbox 项目地址:

  • https://github.com/ecoAPM/LoadTestToolbox

测试主机规格配置

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

测试主机设备信息

CRUD 性能测试对比

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

1、ltt 工具测试

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

ltt-nailgun

1.1、AddSingle 单条数据添加

输入命令:

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

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

  • sqlite-AddSingle
    sqlite-addsingle

  • litedb-AddSingle

litedb-addsingle

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

输入命令:

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

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

  • sqlite-AddBulk

sqlite-addbulk

  • litedb-AddBulk

litedb-addbulk

1.3、GetSingle 单条数据查询

输入命令:

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

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

  • sqlite-GetSingle

sqlite-getsingle

  • litedb-GetSingle

litedb-getsingle

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

输入命令:

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

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

  • sqlite-GetAll

sqlite-getall

  • litedb-GetAll

litedb-getall

2、方法执行时间分析

2.1、查看 WeatherForecast 天气预报数据

2.1.1、LiteDB 数据集记录信息
  • 执行 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;
  • 输出结果:

litedb-group

2.1.2、SQLite 数据表记录信息
  • 执行 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;
  • 输出结果:

sqlite-select

2.2、显示 LiteDB.Studio 截图

  • a1、执行 sql 语句:
SELECT $ FROM ActionExecInfo
order by ActionName;
  • a2、输出结果:

litedb-orderby

  • b1、执行 sql 语句:
SELECT  *.Database,*.ActionName,COUNT(*) AS total,[MAX(*.ExecTime),MIN(*.ExecTime)] ExecTime
FROM ActionExecInfo
GROUP By ActionName;
  • b2、输出结果:

litedb-groupby

2.3、测试类库版本

SQLiteLiteDB
Version3.41.25.0.17
Nuget PackageFreeSql.Provider.Sqlite v3.2.805LiteDB.Async v0.1.7

2.4、统计结果信息

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

dbAddSingle/1AddBulk/1000GetSingle/1GetAll/1000UpdateSingle/1UpdateBulk/30DeleteSingle/1DeleteBulk/30
sqlite864165815284705170479181709904419176842337785313632074044810895
litedb507606216464773167457881705384724372806252779663472934535131508
  • 折线统计图显示信息:

折线统计图

  • 柱状统计图显示信息:

柱状统计图

说明:以上数值越小越好,执行时间单位:毫秒/ms。
操作类型后面跟的是数据行数,例如:AddSingle/1,执行单次数据添加操作,数据量1条。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/266313.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件误删危机!同事操作失误,老板情急之下该如何处理?

近期,一则企业员工误删数据事件引发热议。 (截图源自网络) 起因是某公司员工被公司辞退后,已经做完交接就离开了公司。而3天后,新来的员工不小心把这位同事原本办公电脑里的资料给删除了,且由于没有进行数…

<JavaEE> 锁进阶 -- 锁策略(乐观锁和悲观锁、重量级锁和轻量级锁、自旋锁和挂起等待锁、可重入锁和不可重入锁、公平锁和非公平锁、读写锁)

目录 一、锁策略介绍 二、乐观锁和悲观锁 三、轻量级锁和重量级锁 四、自旋锁和挂起等待锁 五、公平锁和非公平锁 六、可重入锁和不可重入锁 七、读写锁 一、锁策略介绍 加锁的目的是为了保证线程安全,根据不同的实际情况,锁也会有不同的策略来应…

nginx配置自动压缩-gzip压缩

1.nginx配置文件 server里添加gzip配置信息。 重启nginx服务 对比效果:上图是没有开启gzip自动压缩,总共资源是1.3M,传输1.3MB,下图是开启gzip压缩,总共资源是1.3M,传输了973KB。

2023年华为HCIA认证H12-811题库讲解

在VRP平台上,可以通过下面哪种方式返回到上一条历史命令?( ) A、Ctr1U B、Ctr1P C、左光标 D、上光标 试题答案:BD 试题解析:在VRP系统中,ctrlU为自定义快捷键,ct…

网工内推 | 项目经理专场,最高20K*13薪,软考证书优先

01 Trasen 招聘岗位:大项目经理(医疗行业/HIS) 职责描述: 1.负责项目按计划完成交付并顺利验收结项; 2.参与项目前期预算、评审、方案设计等; 3.负责具体项目实施,制定项目计划、组织项目资源、…

2022年拉丁美洲中东和非洲医疗机器人市场及全球概况报告

今天分享的是机器人系列深度研究报告:《2022年拉丁美洲中东和非洲医疗机器人市场及全球概况报告》。 (报告出品方:Apollo Reports) 报告共计:195页 研究方法论 2.1通过桌面研究和内部存储库的假设 a)最初&#xff…

Python从入门到精通五:Python数据容器

数据容器入门 为什么学习数据容器 思考一个问题:如果我想要在程序中,记录5名学生的信息,如姓名。 如何做呢? 学习数据容器,就是为了批量存储或批量使用多份数据 Python中的数据容器: 一种可以容纳多份…

记录一下快速上手Springboot登录注册项目

本教程需要安装以下工具,如果不清楚怎么安装的可以看下我的这篇文章 链接: https://blog.csdn.net/qq_30627241/article/details/134804675 管理工具: maven IDE: IDEA 数据库: MySQL 测试工具: Postman 打开IDE…

进程的同步和异步、进程互斥

一、进程同步和异步 同步(Synchronous): 同步指的是程序按照顺序执行,一个操作完成后才能进行下一个操作。在多进程或多线程的环境中,同步意味着一个进程(或线程)在执行某个任务时,…

STM32MP157D-DK1开发板固件烧录

本篇介绍STM32MP157D-DK1开发板如何烧录官方固件。 1 开发板基础硬件介绍 1.1 常用接口 板子上的各种接口功如下,本篇固件烧录,主要用的接口包括: CN6:供电接口B2:复位按键CN11:ST-LINK USB&#xff08…

【QT入门】基础知识

一.认识Qt qt是一套应用程序开发库,与MFC不同是跨平台的开发类库,主要用来开发图形界面。完全面向对象容易扩展。 优点:1.封装性强,简单易学 2.跨平台 3.独立编译为本地代码 二.qt工程 1.常见的工程文件有这两种…

4fiddler抓包工具的使用

一、定义 1.1 抓包的定义 说明:客户端向服务器发送请求以及服务器响应客户端的请求,都是以数据包来传递的。 抓包(packet capture):通过工具拦截客户端与服务器交互的数据包 1.2 fiddler的介绍 Fiddler是一个http协议调试代理工具&#…