.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.png

ltt 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.png

ltt 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.png

ltt 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.png

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【小白专用】使用PHP创建和操作MySQL数据库,数据表

php数据库操作 php连接mysql数据库 <?php $hostlocalhost; // 数据库主机名 $username"root"; // 数据库用户名 $password"al6"; // 数据库密码 $dbname"mysql"; // 数据库名 $connIDmysqli_connect($host,$username,$password,$dbn…

关于uview-ui的u-tabs标签滑块不居中的问题

在uniapp中&#xff0c;打开文件 uni_modules/uview-ui/components/u-tabs/u-tabs.vue 然后在style中添加以下代码即可 /deep/ .u-tabs__wrapper__nav__line {left: 18rpx; } 之前效果图&#xff1a; 之后效果图&#xff1a; 注意&#xff0c;代码中的18rpx需要自行调整

LeetCode力扣每日一题(Java):35、搜索插入位置

一、题目 二、解题思路 1、我的思路&#xff08;又称&#xff1a;论API的重要性&#xff09; 读完题目之后&#xff0c;我心想这题目怎么看着这么眼熟&#xff1f;好像我之前学过的一个API呀&#xff01; 于是我回去翻了翻我之前写的博客&#xff1a;小白备战蓝桥杯&#xf…

女士内衣市场分析:预计2028年将达到643.08亿美元

内衣 (英文名:Underwear)&#xff0c;是指贴身穿的衣物。内衣有保暖及污秽的危害作用&#xff0c;有时会被视为性征。女士内衣行业生产的主要原料是各类织布或无纺布&#xff0c;成分有海绵、边、定型纱、骨胶、肩带等&#xff0c;布面料在内衣企业的生产成本中所占比重较大。女…

用FPGA实现四通道、全频率 GNSS RF 接收器-用于卫星的精确定位

用FPGA实现四通道、全频率 GNSS RF 接收器-用于卫星的精确定位 概念 全球导航卫星系统&#xff08;英文&#xff1a;Global Navigation Satellite System&#xff0c;GNSS &#xff09;&#xff0c;又称全球卫星导航系统&#xff0c;是能在地球表面或近地空间的任何地点为用户提…

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

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

IMU用于汽车前照灯调平

研究者进行了以创新车辆中的自动前照灯调平的实验&#xff0c;这是夜间驾驶安全的关键功能。这项科学探索围绕着使用低成本的MEMS IMU&#xff08;微机电系统惯性测量单元&#xff09;来估计道路和车辆前照灯之间的俯仰角&#xff0c;确保最佳的前照灯光束调节并减少迎面而来的…

Redis探秘:AOF日志与数据持久性之旅

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊Redis。你知道吗&#xff0c;Redis作为一个超高效的内存数据库&#xff0c;真的是超级给力。它可以秒速处理数据&#xff0c;让咱们的应用运行得飞快。但是&#xff0c;小黑得告诉你&#xff0c;虽…

链式二叉树的前序、中序、后序遍历实现(C语言)

目录 前言 二叉树的遍历 模拟实现二叉树&#xff08;链式二叉树&#xff09; 前序遍历 前序遍历的实现 二叉树的递归遍历图 中序遍历 中序遍历的实现 后序遍历 后序遍历的实现 整体代码 前言 我们在二叉树的基本概念&#xff08;C语言&#xff09;中学习了二叉树的…

IDE代码编辑器:CLion 2023.3(WinMac)中文激活版

CLion 2023是一款由JetBrains公司为C/C编程设计的跨平台集成开发环境&#xff08;IDE&#xff09;。它集成了丰富的功能和工具&#xff0c;旨在帮助开发人员更高效地进行C/C编程和调试。 以下是这款软件的一些主要特点和功能&#xff1a; 高效的编程体验&#xff1a;为Mac用户提…

15、lambda表达式、右值引用、移动语义

前言 返回值后置 auto 函数名 (形参表) ->decltype(表达式) lambda表达式 lambda表达式的名称是一个表达式 (外观类似函数)&#xff0c;但本质绝非如此 语法规则 [捕获表] (参数表) 选项 -> 返回类型 { 函数体; }lambda表达式的本质 lambda表达式本质其实是一个类…

供应链管理的“牛鼻子”在哪里?

什么是供应链管理&#xff1f; 有个定义&#xff1a;供应链管理是使以核心企业为中心的供应链运作达到最优化&#xff0c;以最小的成本&#xff0c;让供应链从采购开始&#xff0c;到满足最终顾客的所有过程&#xff0c;包括物流、信息流、单证流、资金流等均能高效率运作&…

Windows 安全基础——NetBIOS篇

Windows 安全基础——NetBIOS篇 1. NetBIOS简介 NetBIOS&#xff08;Network Basic Input/Output System, 网络基本输入输出系统&#xff09;是一种接入服务网络的接口标准。主机系统通过WINS服务、广播及lmhosts文件多种模式&#xff0c;把NetBIOS名解析对应的IP地址&#xf…

3篇EI论文联合复现:基于数据驱动的综合能源系统多阶段分布鲁棒优化调度程序代码!

本程序参考了3篇电力系统TOP-EI期刊&#xff0c;将目前的热点研究数据驱动结合综合综合能源系统&#xff0c;利用分布鲁棒处理不确定性问题&#xff0c;程序中算例丰富&#xff0c;注释清晰&#xff0c;干货满满&#xff0c;小编非常推荐这个程序&#xff0c;下面对程序代码详细…

【代码+案例】详解SPC相关控制图原理及逻辑代码

Xbar-R图&#xff1a;用于监控样本均值和范围&#xff0c;适合小样本量。Xbar-S图&#xff1a;类似Xbar-R图&#xff0c;但适用于大样本量。p图&#xff1a;用于监控一定时间或样本量内的缺陷比率。np图&#xff1a;类似p图&#xff0c;但用于固定样本量。u图&#xff1a;用于监…

机器学习算法(9)——集成技术(Bagging——随机森林分类器和回归)

一、说明 在这篇文章&#xff0c;我将向您解释集成技术和著名的集成技术之一&#xff0c;它属于装袋技术&#xff0c;称为随机森林分类器和回归。 集成技术是机器学习技术&#xff0c;它结合多个基本模块和模型来创建最佳预测模型。为了更好地理解这个定义&#xff0c;我们需要…

【C++11(三)】智能指针详解--RAII思想循环引用问题

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; C11 1. 前言2. 为什么要有智能指针?3. RAII思想…

.NET 材料检测系统崩溃分析

Windbg 分析 1. 到底是哪里的崩溃 一直跟踪我这个系列的朋友应该知道分析崩溃第一个命令就是 !analyze -v &#xff0c;让windbg帮我们自动化异常分析。 0:033> !analyze -v CONTEXT: (.ecxr) rax00000039cccff2d7 rbx00000039c85fc2b0 rcx00000039cccff2d8 rdx000000000…

水库大坝安全监测参数与设备

智慧水利中&#xff0c;水库大坝的安全监测必不可少。做好水库大坝的安全监测&#xff0c;是确保水库大坝结构安全和预防灾害的重要手段。对于预防灾害、保护人民生命财产安全、优化工程管理、改进工程设计、保护环境资源和提高公众信任等方面有着重要的意义。 水利水库大坝安全…

酷滴科技出席浦发银行第七届国际金融科技创新大赛

12月7日&#xff0c;浦发银行全球金融科技创新大赛在上海展开决赛。本届大会以“科技金融&#xff0c;激发创新力量”为主题&#xff0c;聚焦金融行业数字化转型过程中的痛点与难点&#xff0c;旨在探讨新时代下金融科技的新角色、新机遇以及新挑战。酷滴科技CEO张沈分享了酷滴…