.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.mzph.cn/news/214957.shtml

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

相关文章

多合一iPhone 解锁工具:iMyFone LockWiper iOS

多合一iPhone 解锁工具 无需密码解锁 iPhone/iPad/iPod touch 上所有类型的屏幕锁定 在几分钟内解锁 iPhone Apple ID、Touch ID 和 Face ID 立即绕过 MDM 并删除 iPhone/iPad/iPod touch 上的 MDM 配置文件 支持所有 iOS 版本和设备,包括最新的 iOS 17 和 iPhone 1…

JAVA实操经验

零: 按照需要,可以使用需要某个类下(主要是java提供的)的方法来实现某个功能。(主要是用在不同类下的方法会进行重写功能不同) 方法和构造方法不同:方法是方法,构造方法是构造器&a…

基于FPGA的视频接口之高速IO

简介 相对于其他视频接口来说,高速IO接口(以Xilinx公司为例,spartan 6系列的GTP、Artix7系列的GTP,KENTEX7系列的GTX和GTH等)具有简化设计、充分利用FPGA资源、降低设计成本等功能。 高速IO接口传输视频,一般会被拓展为万兆以太网、40G以太网、10G光纤、40G光纤、3G-SDI、…

c语言插入排序及希尔排序详解

目录 前言: 插入排序: 希尔排序: 前言: 排序在我们生活中无处不在,比如学生成就排名,商品价格排名等等,所以排序在数据结构的学习中尤为重要,今天就为大家介绍两个经典的排序算法&…

深入解析C++中的虚函数和虚继承:实现多态性与继承关系的高级特性

这里写目录标题 虚函数虚函数实现动态绑定虚继承抽象类 虚函数 虚函数是在C中用于实现多态性的一种特殊函数。它通过使用关键字"virtual"进行声明,在基类中定义,可在派生类中进行重写。虚函数允许在运行时根据对象的实际类型来调用相应的函数…

BigData之Google Hadoop中间件安装

前言 Hadoop / Zookeeper / Hbase 因资源有限 这三个都是安装在同一台Centos7.9的机器上 但通过配置 所以在逻辑上是distributed模式 1 Java安装 1.1 下载java11 tar/opt/java/jdk-11.0.5/ 1.2 环境配置修改 文件/etc/profile export JAVA_HOME/opt/java/jdk-11.0.5/ e…

HarmonyOS编译开源native库(OpenSSL实例)

前言 近期项目要开始做鸿蒙版本,有一部分依赖native的代码也需要迁移,某个native模块依赖openssl,需要在鸿蒙下重新编译openssl才行。一开始找了很多相关文档都没有得到方法,无奈只能自己凭经验慢慢试,最后还是成功了…

JS基础之执行上下文

JS基础之执行上下文 执行上下文顺序执行可执行代码执行上下文栈回顾上文 执行上下文 顺序执行 写个JavaScript的开发者都会有个直观的印象,那就是顺序执行: var foo function(){console.log(foo1) } foo(); //foo1 var foo function(){console.log(…

HTML面试题---专题一

文章目录 一、前言二、 HTML5 中 <header> 和 <footer> 标签的用途是什么&#xff1f;三、如何在 HTML 中嵌入 SVG&#xff08;可缩放矢量图形&#xff09;文件&#xff1f;四、解释 contenteditable 属性的用途五、如何创建随屏幕尺寸缩放的响应式图像&#xff1f…

线上扭蛋机小程序搭建,扭蛋与科技的完美结合

扭蛋机作为当下比较热门的一种盲盒玩法&#xff0c;在年轻人群体中非常受欢迎。随着经济的增长和人们生活水平的提高&#xff0c;人们对娱乐消费需求也在增加&#xff0c;扭蛋机的受众群体也在扩大。 目前线上扭蛋机小程序也获得了大众的青睐&#xff0c;扭蛋机小程序就是把线…

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

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

AR-LDM原理及代码分析

AR-LDM原理AR-LDM代码分析pytorch_lightning(pl)的hook流程main.py 具体分析TrainSampleLightningDatasetARLDM blip mm encoder AR-LDM原理 左边是模仿了自回归地从1, 2, ..., j-1来构造 j 时刻的 frame 的过程。 在普通Stable Diffusion的基础上&#xff0c;使用了1, 2, .…

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

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

Web网站服务(二)

1、客户机地址限制。 Require all granted&#xff1a;表示允许所有主机访问。 Require all denied&#xff1a;表示拒绝所有主机访问。 Require local&#xff1a;表示仅允许本地主机访问。 Require [not] host <主机名或域名列表>&#xff1a;表示允许或拒绝指定主机或…

Web安全-SQL注入【sqli靶场第11-14关】(三)

★★实战前置声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将其信息做其他用途&#xff0c;由用户承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 0、总体思路 先确认是否可以SQL注入&#xff0…

轻空间助力中国高校实现场馆多功能一体化

中国高校在迎接体育、文艺、学术等多元化需求的同时&#xff0c;面临着场馆设施不足、建设成本高的难题。然而&#xff0c;随着轻空间&#xff08;江苏&#xff09;膜科技有限公司的崭新解决方案的引入&#xff0c;中国高校如苏州大学等正迎来一场场馆多功能一体化的革命。 创新…

电源小白入门学习4——LDO的选择与使用技巧

电源小白入门学习4——LDO的选择与使用技巧 LDO简介LDO工作原理LDO选型LDO并联问题LDO的新发展 上期我们介绍了开关电源系统中一些常见的元器件&#xff0c;这期我们来学习LDO的选择与使用技巧 LDO简介 LDO的全称是低压差线性稳压器&#xff08;Low Drop-Out Linear Regulator…

计算机病毒判定专家系统原理与设计《文字提取人工修正》

内容源于网络。网络上流转的版本实在是不易阅读&#xff0c; 又不忍神作被糟蹋故稍作整理&#xff0c;对于内容仍然有识别不准的地方&#xff0c;网友可留言&#xff0c;我跟进修改。 雷 军 &#xff08;武汉大学计算机系&#xff0c;430072) 摘要: 本文详细地描述了…

【UML】NO.2 UML必须了解的基础知识(举例)

目录 一、UML的构成 1.1 事物 1.2 关系 1.3 图 二、事物 2.1 结构事物 2.1.1 类&#xff08;class&#xff09; 2.1.2 接口 2.1.3 协作 2.1.4 用例 2.1.5 主动类 2.1.6 构件 2.1.7 节点 2.2 行为事物 2.2.1 交互 2.2.2 状态机 2.2.3 活动 2.3 分组事物 包 …