.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.pswp.cn/news/214957.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214957.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214957.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot使用JUnit和Mockito進行Service層單元測試

文章目錄 前言一、單元測試是什么二、為什么要寫單元測試三、簡單示例假設我們有一個簡單的UserService類,其中包含了一些用戶相關的邏輯:首先,我們需要引入JUnit和Mockito的依賴。在Maven項目中,可以在pom.xml文件中添加以下依賴…

多合一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…

SQL語句---查詢數據

介紹 使用sql語句查詢數據。 命令 select 字段1,字段2 from 表名;例子 查詢指定字段: select id,name from a;使用*查詢所有字段: select * from a;

JAVA實操經驗

零: 按照需要,可以使用需要某個類下(主要是java提供的)的方法來實現某個功能。(主要是用在不同類下的方法會進行重寫功能不同) 方法和構造方法不同:方法是方法,構造方法是構造器&a…

Kotlin 中的 `use` 關鍵字:優化資源管理(避免忘記inputStream.close() ?)

在 Android開發中,正確且高效地管理資源是至關重要的。use 關鍵字在 Kotlin 中為資源管理提供了一個簡潔且強大的解決方案。它主要用于自動管理那些需要關閉的資源,比如文件、網絡連接等。 一、use 關鍵字的工作原理 🤖 use 是一個擴展函數…

基于FPGA的視頻接口之高速IO

簡介 相對于其他視頻接口來說,高速IO接口(以Xilinx公司為例,spartan 6系列的GTP、Artix7系列的GTP,KENTEX7系列的GTX和GTH等)具有簡化設計、充分利用FPGA資源、降低設計成本等功能。 高速IO接口傳輸視頻,一般會被拓展為萬兆以太網、40G以太網、10G光纖、40G光纖、3G-SDI、…

c語言插入排序及希爾排序詳解

目錄 前言: 插入排序: 希爾排序: 前言: 排序在我們生活中無處不在,比如學生成就排名,商品價格排名等等,所以排序在數據結構的學習中尤為重要,今天就為大家介紹兩個經典的排序算法&…

adb 查找啟動的包名以及導出安裝包

查看安卓內包名 adb 查看所有安裝的包 adb shell pm list packages查看安裝的第三方app的包名 adb shell pm list packages -3查看啟動的app的包名 adb shell dumpsys activity top | find "ACTIVITY"adb shell dumpsys activity activities | findstr "Run…

深入解析C++中的虛函數和虛繼承:實現多態性與繼承關系的高級特性

這里寫目錄標題 虛函數虛函數實現動態綁定虛繼承抽象類 虛函數 虛函數是在C中用于實現多態性的一種特殊函數。它通過使用關鍵字"virtual"進行聲明,在基類中定義,可在派生類中進行重寫。虛函數允許在運行時根據對象的實際類型來調用相應的函數…

pip 通過git安裝庫

舉例:安裝peft庫 git clone https://github.com/huggingface/peft.git cd peft python -m pip install . 解釋: 使用git clone克隆PEFT庫的代碼。進入克隆的目錄。使用python -m pip install .來安裝PEFT庫。 補充:使用pip安裝到指定編譯器…

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…

新網站如何被搜索引擎迅速收錄

說到搜索引擎收錄新站的問題,大家應該對這個問題產生了一個共鳴,那就是要想要網站被收,難! 難于上青天。那是不是說這青天我們就上不了了呢,不是的,其實要想百度快速收錄新站,還是有訣竅的,關鍵…

【UE c++】 UE中c++如何使用回調(關卡動畫回調為例)

本文使用關卡動畫回調為例 1.創建關卡動畫 FString assetsPath "你的路徑"; FStringAssetReference sequenceName(assetsPath);ULevelSequence* sequenceAsset Cast<ULevelSequence>(sequenceName.TryLoad());ALevelSequenceActor* currentLevelSequenceAc…

HarmonyOS編譯開源native庫(OpenSSL實例)

前言 近期項目要開始做鴻蒙版本&#xff0c;有一部分依賴native的代碼也需要遷移&#xff0c;某個native模塊依賴openssl&#xff0c;需要在鴻蒙下重新編譯openssl才行。一開始找了很多相關文檔都沒有得到方法&#xff0c;無奈只能自己憑經驗慢慢試&#xff0c;最后還是成功了…

JS基礎之執行上下文

JS基礎之執行上下文 執行上下文順序執行可執行代碼執行上下文棧回顧上文 執行上下文 順序執行 寫個JavaScript的開發者都會有個直觀的印象&#xff0c;那就是順序執行&#xff1a; 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;排序就完成了。 假設我們想要從小到大進行排序&#…

大模型:常見的文字表情包(可以直接加到微調數據里)

大模型&#xff1a;常見的文字表情包(可以直接加到微調數據里) 返回論文目錄 返回資料目錄 表情符號含義&#x1f60a;愉快、微笑&#x1f602;大笑&#x1f60d;愛心眼&#x1f60e;酷、自信&#x1f914;思考、疑惑&#x1f61c;調皮、頑皮&#x1f64c;鼓掌、慶祝&#x1f…

線上扭蛋機小程序搭建,扭蛋與科技的完美結合

扭蛋機作為當下比較熱門的一種盲盒玩法&#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…