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

news2024/11/24 16:21:44

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

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

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

相关文章

angular form 组件、双向绑定;反应式表单

1.使用双向绑定,以及angular的表单提交功能 app.moudle中引入 双向绑定 [(ngModel)]"text" ​​​​​​​ 效果 提交表单 2.反应式表单 在app.module.ts中引入在组件中引入,并放在一个变量里 在初始化时实列化这个module 定义规则 在html…

成都工业学院Web技术基础(WEB)实验五:CSS3动画制作

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考,前端变化比较大,按照要求,只能做到像,不能做到一模一样 3、图片和文字仅为示例,需要自行替换 4、如果代码不满足你的要求,请寻求其他的…

【Python必做100题】之第四题(判断素数)

素数:约数只有1和本身的数叫素数 代码如下: a int(input("请随机输入一个数字:")) #键盘随机输入一个数字进行判断 flag False for i in range(2,a):if a % i 0: #在(2,a-1)之间但凡有一个可以整除就不是素数break…

java代码test

目录结构 对于使用ArrayList集合并使用Iterator遍历 package test2; import java.util.ArrayList; import java.util.Iterator;public class T8 {public static void main(String[] args) {// 创建ArrayList集合并添加元素ArrayList<String> arrayList new ArrayList&l…

在项目中,使用drawio创建一个共享协作看板

在项目中&#xff0c;使用drawio创建一个共享协作看板 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功…

Flask应用基础入门总结

【1】使用migrate方式进行数据库连接 使用migrate方式进行数据库连接需要在终端分别运行三行代码&#xff1a; #init&#xff08;运行一次即可&#xff09;&#xff08;此db为自己设置的连接数据库的对象,可以修改&#xff09; flask db init #&#xff08;将orm模型生成迁移…

Javaweb之附录的详细解析

05. 附录 5.1 更新依赖索引 有时候给idea配置完maven仓库信息后&#xff0c;在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了&#xff0c;具体做法如下&#xff1a; 打开设置----搜索maven----R…

N皇后,回溯【java】

问题描述 八皇后问题是十九世纪著名的数学家高斯于1850年提出的。 问题是&#xff1a;在88的棋盘上摆放八个皇后&#xff0c;使其不能互相攻击&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。可以把八皇后问题扩展到n皇后问题&#xff0c;即在nn的棋盘上摆…

JMeter提取器

JMeter三大提取器 一、正则表达式提取器二、XPath提取器三、JSON提取器四、JSON属性 一、正则表达式提取器 使用场景&#xff1a; 任意格式的响应数据都可以使用正则表达式提取器&#xff1b;操作步骤&#xff1a; 添加线程组-添加HTTP请求-添加后置处理器-添加正则表达式提取…

udp多播组播

import socket ,struct,time# 组播地址和端口号 MCAST_GRP 239.0.0.1 MCAST_PORT 8888 # 创建UDP socket对象 sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # 绑定socket对象到本地端口号 # sock.bind((MCAST_GRP, MCAST_PORT)) …

textarea文本框回车enter的时候自动提交表单,根据内容自动高度

切图网近期一个bootstrap5仿chatgpt页面的项目遇到的&#xff0c;textarea文本框回车enter的时候自动提交表单&#xff0c;根据内容自动高度&#xff0c;代码如下&#xff0c;亲测可用。 <textarea placeholder"Message ChatGPT…" name"" rows"&q…

排序的简单理解(上)

1. 排序的概念及引用 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作&#xff08;按照我们的需求能够有序的将数据信息排列起来&#xff09;。 稳定性&#xff1a;假…

大数据讲课笔记1.3 Linux目录操作

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;常用权限操作1、常用权限操作&#xff08;1&#xff09;chgrp命令&#xff08;2&#xff09;chown命令&#xff08;3&#xff09;chmod命令 2、权限操作实战任务1、创建文件&#xff0c;设置其用户组任…

docker Compose-网络设置

目录 一、概述 二、容器网络模型(了解) CNM主要有三部分组成 CNM驱动接口 Docker内置网络驱动 三、Docker Compose-网络设置二 一、概述 二、使用 links 三、自定义网络 四、配置默认网络 五、已存在的网络 一、概述 随着微服务的事件&#xff0c;应用的越来越多&a…

去除水中的悬浮固体、重金属和各种酸

每个球粒直径通常在2-5毫米范围内 的&#xff0c;可用于固定床吸附污染物。不过球粒尺寸可以根据客户的具体需求生产 TRAPPSORB尽管它与颗粒产品具有相同的化学成分&#xff0c;但由于其独特 的外表面和结构&#xff0c;它与其他基于MgO的材料根本不同&#xff0c; 它由独特的…

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…

Uniapp安卓原生插件开发Demo

文章目录 前言一、安装开发工具二、导入uni插件原生项目三、开发Module四、开发Component五、合并原生代码到uniapp项目中总结 前言 当HBuilderX中提供的能力无法满足App功能需求&#xff0c;需要通过使用Andorid/iOS原生开发实现时&#xff0c;可使用App离线SDK开发原生插件来…

【Python可视化系列】一文彻底教会你绘制美观的折线图(理论+源码)

一、前言 折线图是一种常用的可视化图表&#xff0c;可以清晰地展示数据随时间或其他连续变量的变化趋势&#xff0c;通过连接数据点&#xff0c;可以观察到数据的上升、下降、波动等变化趋势&#xff0c;帮助人们更直观地理解数据的变化规律。 二、基本折线图 2.1简单折线图 …

T5论文个人记录

参考&转载自&#xff1a; 介绍Google推出的大一统模型—T5_谷歌大模型_深度之眼的博客-CSDN博客 T5 和 mT5-CSDN博客 T5&#xff1a;Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer&#xff08;万字长文略解T5&#xff09;_t5论文…

Diffusion Models: A Comprehensive Survey of Methods and Applications

摘要 扩散模型作为一个强大的新的深度生成模型系列出现&#xff0c;在许多应用中具有破纪录的性能&#xff0c;包括图像合成、视频生成和分子设计。在这项调查中&#xff0c;我们对迅速扩大的扩散模型的工作进行了概述&#xff0c;将研究分为三个关键领域&#xff1a;有效采样…