MongoClient和AsyncIOMotorClient的區別和用法

示例代碼:

from motor.motor_asyncio import AsyncIOMotorClient
from pymongo import MongoClient

🔍 這兩個庫分別是:

名字說明舉個例子
pymongo.MongoClient同步版 的 MongoDB 客戶端(常規阻塞式操作)你在主線程里一行一行地讀寫 Mongo,等上一步做完才能做下一步
motor.motor_asyncio.AsyncIOMotorClient異步版 的 MongoDB 客戶端(非阻塞協程)你可以用 await,并發跑多個 Mongo 操作,適合高并發 Web 應用

? 區別

1. pymongo.MongoClient(同步)

  • 每一次數據庫操作都會阻塞代碼執行,等 MongoDB 返回結果之后,程序才繼續往下走。
  • 適合腳本、命令行工具、Jupyter、低并發后端服務。

比喻:
像是你去銀行排隊,一個人辦完業務,下一個人才能開始。


2. motor.AsyncIOMotorClient(異步)

  • 每次數據庫操作是異步非阻塞的,你可以 await 數據返回,但其他任務可以同時干活。
  • 適合 FastAPI、aiohttp 這類異步 Web 框架,可以顯著提升并發性能。

比喻:
像是網上辦業務,你遞交申請后不用等結果,先去干別的,等通知你再回來取。


🔢 舉個數值對比的例子:

假設你要對 MongoDB 讀取 1000 個用戶文檔。

使用 pymongo.MongoClient(同步):

from pymongo import MongoClientclient = MongoClient()
db = client["mydb"]
users = db["users"]for i in range(1000):doc = users.find_one({"_id": i})  # 每次都等待數據庫返回

?? 假設每次請求花費 10ms,總耗時大約:

1000 次 × 10ms = 10,000ms ≈ 10秒

使用 motor.AsyncIOMotorClient(異步 + 并發):

from motor.motor_asyncio import AsyncIOMotorClient
import asyncioclient = AsyncIOMotorClient()
db = client["mydb"]
users = db["users"]async def get_user(i):return await users.find_one({"_id": i})results = await asyncio.gather(*[get_user(i) for i in range(1000)])  # 并發執行

💡 因為是并發的,可以同時發出多個請求,假設最多100個并發連接:

1000 次 ÷ 100 并發批次 × 10ms ≈ 100ms

? 總時間只需要 ~0.1 秒,而不是 10 秒!性能提升 100 倍!


? 總結對比表

特性pymongo.MongoClient(同步)motor.AsyncIOMotorClient(異步)
編程模式同步,阻塞異步,非阻塞(await
適用場景腳本、數據分析、低并發后端FastAPI、aiohttp 等高并發后端
并發性能差,串行執行高,可并發處理成百上千請求
代碼復雜度稍高(需要 async def + await
官方推薦適合非異步項目適合異步框架

🔧 技術選型建議:

如果你是用…推薦使用
Flask、Djangopymongo.MongoClient
FastAPI、aiohttp、Sanicmotor.AsyncIOMotorClient

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81022.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81022.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81022.shtml

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

相關文章

5.15打卡

浙大疏錦行 DAY 26 函數專題1 知識點回顧: 1. 函數的定義 2. 變量作用域:局部變量和全局變量 3. 函數的參數類型:位置參數、默認參數、不定參數 4. 傳遞參數的手段:關鍵詞參數 5. 傳遞參數的順序:同時出現三種參數…

針對面試-mysql篇

1.如何定位慢查詢? 1.1.介紹一下當時產生問題的場景(我們當時的接口測試的時候非常的慢,壓測的結果大概5秒鐘)),可以監測出哪個接口,最終因為是sql的問題 1.2.我們系統中當時采用了運維工具(Skywalking就是2秒,一旦sql執行超過2秒…

window 顯示驅動開發-報告圖形內存(三)

圖形內存報告示例 示例 1:筆記本電腦上的 128 MB 專用板載圖形內存 以下屏幕截圖顯示了使用 Intel Iris 離散圖形適配器運行 Windows 11 的 Surface 筆記本電腦的計算圖形內存數。 適配器的可用內存總數為 16424 MB,用于圖形用途,細分如下&…

極簡主義現代商務風格PPT模版6套一組分享下載

現代商務風格PPT模版下載https://pan.quark.cn/s/12fbc52124d9 第一張PPT模版,簡約風,橄欖綠背景,黑色豎條裝飾,文字有中英文標題和占位符。需要提取關鍵元素:簡約、橄欖綠、對稱布局、占位文本的位置。 風格?&#…

SpringBoot中10種動態修改配置的方法

在SpringBoot應用中,配置信息通常通過application.properties或application.yml文件靜態定義,應用啟動后這些配置就固定下來了。 但我們常常需要在不重啟應用的情況下動態修改配置,以實現灰度發布、A/B測試、動態調整線程池參數、切換功能開…

嵌入式自學第二十二天(5.15)

順序表和鏈表 優缺點 存儲方式: 順序表是一段連續的存儲單元 鏈表是邏輯結構連續物理結構(在內存中的表現形式)不連續 時間性能, 查找順序表O(1):下標直接查找 鏈表 O(n):從頭指針往后遍歷才能找到 插入和…

高并發內存池(三):TLS無鎖訪問以及Central Cache結構設計

目錄 前言: 一,thread cache線程局部存儲的實現 問題引入 概念說明 基本使用 thread cache TLS的實現 二,Central Cache整體的結構框架 大致結構 span結構 span結構的實現 三,Central Cache大致結構的實現 單例模式 thr…

Ubuntu 安裝 Docker(鏡像加速)完整教程

Docker 是一款開源的應用容器引擎,允許開發者打包應用及其依賴包到一個輕量級、可移植的容器中。本文將介紹在 Ubuntu 系統上安裝 Docker 的步驟。 1. 更新軟件源 首先,更新 Ubuntu 系統的軟件源: sudo apt update2. 安裝基本軟件 接下來…

【深度學習】數據集的劃分比例到底是選擇811還是712?

1 引入 在機器學習中,將數據集劃分為訓練集(Training Set)、驗證集(Validation Set)和測試集(Test Set)是非常標準的步驟。這三個集合各有其用途: 訓練集 (Training Set)&#xff…

Mysql刷題 day01

LC 197 上升的溫度 需求:編寫解決方案,找出與之前(昨天的)日期相比溫度更高的所有日期的 id 。 代碼: select w2.id from Weather as w1 join Weather as w2 on DateDiff(w2.recordDate , w1.recordDate) 1 where…

鴻蒙OSUniApp 制作個人信息編輯界面與頭像上傳功能#三方框架 #Uniapp

UniApp 制作個人信息編輯界面與頭像上傳功能 前言 最近在做一個社交類小程序時,遇到了需要實現用戶資料編輯和頭像上傳的需求。這個功能看似簡單,但要做好用戶體驗和兼容多端,還是有不少細節需要處理。經過一番摸索,總結出了一套…

科技的成就(六十八)

623、杰文斯悖論 杰文斯悖論是1865年經濟學家威廉斯坦利杰文斯提出的一悖論:當技術進步提高了效率,資源消耗不僅沒有減少,反而激增。例如,瓦特改良的蒸汽機讓煤炭燃燒更加高效,但結果卻是煤炭需求飆升。 624、代碼混…

榮耀手機,系統MagicOS 9.0 USB配置沒有音頻來源后無法被adb檢測到,無法真機調試的解決辦法

榮耀手機,系統MagicOS 9.0 USB配置沒有音頻來源后無法被adb檢測到,無法真機調試的解決辦法 前言環境說明操作方法 前言 一直在使用的uni-app真機運行榮耀手機方法,都是通過設置USB配置的音頻來源才能成功。突然,因為我的手機的系…

D-Pointer(Pimpl)設計模式(指向實現的指針)

Qt 的 D-Pointer(Pimpl)設計模式 1. Pimpl 模式簡介 Pimpl(Pointer to Implementation)是一種設計模式,用于將類的接口與實現分離,從而隱藏實現細節,降低編譯依賴,提高代碼的可維護…

MySQL 8.0 OCP 1Z0-908 101-110題

Q101.which two queries are examples of successful SQL injection attacks? A.SELECT id, name FROM backup_before WHERE name‘; DROP TABLE injection; --’; B. SELECT id, name FROM user WHERE id23 oR id32 OR 11; C. SELECT id, name FROM user WHERE user.id (SEL…

Vue ElementUI原生upload修改字體大小和區域寬度

Vue ElementUI原生upload修改字體大小和區域寬度 修改后 代碼 新增的修改樣式代碼 .upload-demo /deep/ .el-upload-dragger{width: 700px;height: 300px; }原有拖拽組件代碼 <!-- 拖拽上傳組件 --><el-uploadclass"upload-demo"dragaction"":m…

React和Vue在前端開發中, 通常選擇哪一個

React和Vue的選擇需結合具體需求&#xff1a; 選React的場景 大型企業級應用&#xff0c;需處理復雜狀態&#xff08;如電商、社交平臺&#xff09;團隊熟悉JavaScript&#xff0c;已有React技術棧積累需要高度靈活的架構&#xff08;React僅專注視圖層&#xff0c;可自由搭配…

Python爬蟲實戰:研究源碼還原技術,實現逆向解密

1. 引言 在網絡爬蟲技術實際應用中,目標網站常采用各種加密手段保護數據傳輸和業務邏輯。傳統逆向解密方法依賴人工分析和調試,效率低下且易出錯。隨著 Web 應用復雜度提升,特別是 JavaScript 混淆技術廣泛應用,傳統方法面臨更大挑戰。 本文提出基于源碼還原的逆向解密方法…

什么是alpaca 或 sharegpt 格式的數據集?

環境&#xff1a; LLaMA-Factory 問題描述&#xff1a; alpaca 或 sharegpt 格式的數據集&#xff1f; 解決方案&#xff1a; “Alpaca”和“ShareGPT”格式的數據集&#xff0c;是近年來在開源大語言模型微調和對話數據構建領域比較流行的兩種格式。它們主要用于訓練和微調…

OpenCV CUDA模塊中矩陣操作------矩陣元素求和

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 在OpenCV的CUDA模塊中&#xff0c;矩陣元素求和類函數主要用于計算矩陣元素的總和、絕對值之和以及平方和。這些操作對于圖像處理中的特征提取、…