使用 MongoDB Atlas 無服務器實例更高效地開發應用程序

使用 MongoDB Atlas無服務器實例更高效地開發應用程序

身為開發者,數據庫并不一定需要您來操心。您可不想耗費時間來預配置集群或調整集群大小。同樣地,您也不想操心因未能正確擴展而導致經費超標。

MongoDB Atlas 可為您提供多個數據庫部署選項。雖然您可以選擇預先配置的共享或專用集群,但為了能夠以最佳方式滿足需求,您仍然不得不持續確定數據庫資源的規模并作出相關估算,以及負責隨之而來的集群容量管理。盡管預先配置集群并非什么壞事,但若是您的開發處于閑置狀態,或者開發的增長期或下滑期頻繁出現,預先配置可能就沒有意義了。此時,您完全可以轉為選擇無服務器實例來協助減輕容量管理的負擔,騰出時間來專門編寫代碼。無服務器實例為您的應用程序提供按需數據庫端點,該端點將根據應用程序需求自動擴展或縮減到零,并且只根據您的使用情況向您收費。

在這個簡短但貼心的教程中,我們會探索如何輕松應用 MongoDB Atlas 無服務器實例,以及如何以其為參照開發應用程序。

部署 MongoDB Atlas無服務器實例

我們首先來看如何部署新的 MongoDB Atlas 無服務器實例。完成 MongoDB 部署的方法有很多,但在本文的示例中,我們將始終使用 Web 儀表盤和一些點擊操作。

在 MongoDB Atlas儀表盤中,單擊“創建”按鈕。
在這里插入圖片描述

選擇“無服務器”以及應當存儲此實例的云供應商。

如果可能,請選擇與您的應用程序所在位置相匹配的云供應商。這樣可確保您的數據庫和應用程序之間的延遲最低。

選擇單擊“創建實例”按鈕后,實例即已準備就緒!

不過,這些操作還不夠。要想在 Web 儀表盤之外的位置使用 Atlas 無服務器實例,就需要先創建一些數據庫訪問規則和網絡訪問規則。

我們先來添加一個新數據庫用戶。
在這里插入圖片描述

選擇對您來說最合理的身份驗證類型。為了使本教程簡單明了,我建議選擇“密碼”選項。

涉及到用戶權限時,您當然可以使用“內置角色”,但對于任意應用程序,最好還是根據應允許用戶執行的操作來定義“特定權限”。在這個項目中,我們將使用一個“示例”數據庫和一個“人員”集合,因此只授予該數據庫和集合 readWrite 訪問權限才是合理做法。

在創建用戶及定義訪問權限時,請運用自己的最佳判斷力。

創建用戶后,我們就可以處理網絡訪問的相關內容。完成最后這一步后,我們就能夠以數據庫為參照開始開發工作。
在這里插入圖片描述

在“網絡訪問”選項卡中,添加應允許訪問的 IP 地址。如果您像我一樣在本地開發和測試,只需添加您的本地 IP 地址即可。請務必記得在必要時為您的服務器或云供應商添加 IP 范圍。如果需要,您還可以使用專用網絡。

數據庫和網絡訪問的設置已經完成,我們現在應獲取將在本教程下一步中使用的 URI 字符串。

在“數據庫”選項卡中,單擊無服務器實例對應的“連接”按鈕。
在這里插入圖片描述

選擇要使用的編程語言并記下 URI。

使用熱門編程技術與 Atlas 無服務器實例交互

到這里,您應該已經部署了 Atlas 無服務器實例。我們會花一點時間利用應用程序代碼來連接實例,并進行一些交互,例如基本的 CRUD。

對于此特定示例,我們將搭配使用 JavaScript 與 MongoDB Node.js 驅動程序,但相同的規則和概念會繼續應用,只是與您希望使用的編程語言存在語言差異。

在本地計算機上,創建項目目錄,并使用命令行導航到該目錄。在它成為您的工作目錄后,您就需要執行以下命令:

在這里插入圖片描述

通過上面的命令,我們完成 Node.js 項目初始化,安裝了 MongoDB Node.js 驅動程序,并創建了一個包含我們的代碼的 main.js 文件。

打開 main.js 文件并添加以下 JavaScript 代碼:

在這里插入圖片描述

那么,上面的代碼發生了什么?

首先,我們會使用無服務器實例的 URI 字符串來定義客戶端。這個字符串與您在本教程前面記錄的字符串相同,其應該包含用戶名和密碼。

在客戶端中,我們可以建立連接并獲得對要使用之數據庫和集合的引用。在運行應用程序之前,數據庫和集合不需要存在。

接下來,我們將使用 MongoDB 查詢 API 執行三種不同的操作。首先,向我們的集合插入一個新文檔。插入完成后,在 try/catch 塊沒有發現錯誤的情況下,我們會找到姓氏匹配的所有文檔。對于此示例,應該只有一個文檔,但您完全沒法知道您的代碼是什么樣子。如果找到一個文檔,它就會被打印到控制臺。最后,我們將刪除姓氏匹配的任何文檔。

最后,若您跟著我的示例執行所有步驟,那么您的集合中不應該存在任何文檔。然而,您的集合中(在某個時間點)確實存在過一個文檔,只不過我們將它刪除了。

我們通過一個基本示例了解了如何圍繞按需數據庫構建應用程序,但這個示例并沒有真正凸顯出如此操作的好處。怎么改變這個情況呢?

使用合理的應用場景推送Atlas 無服務器實例

我們知道,預先配置和無服務器集群能夠穩定運作。從開發的角度來看,使用相同的代碼最終會得到相同的結果。

讓我們來設想一個場景:Atlas 中的無服務器實例可以降低開發成本、減少擴展負擔以滿足需求。假設您有一個不是常規類型的網上商店。這家網上商店大部分時間的客流量都很少,但由于您主營閃電式交易,每周五上午 9 點到中午 12 點之間的客流量會激增 1000%。

我就不贅述較低的客流量,但 1000% 的流量增長不容小覷,很可能需要每周五對預先配置的集群進行某種擴展干預才行。否則,您就需要付費使用更大型的數據庫。

讓我們使用下面的 Node.js 代碼具象化這個示例:
在這里插入圖片描述

在上面的示例中,我們采用了由 Express 框架提供技術支持的 Web 應用程序,其中有兩個端點函數。一個端點用于獲得交易,另一個端點則用于創建購買。其余內容,請自行想象。

要對流量會突發的這款應用程序執行負載測試并模擬無服務器實例的潛在價值,我們可以使用 Apache JMeter 等類似工具。

使用 JMeter 后,您可以定義它在發出 HTTP 請求時使用的線程數和迭代次數。
在這里插入圖片描述

請記住,我們在此示例中模擬的是一種突發情況。如果您確實決定要嘗試 JMeter,且面對突發情況時過度操作,您收到的帳單或許會讓您哭笑不得。如果您有興趣了解無服務器的計費方式,請查看文檔中的定價頁面。
在這里插入圖片描述

在 JMeter 線程組中,您需要定義每個線程或迭代所發生的活動。在本例中,我們向 Node.js API 發送 HTTP 請求。

由于 API 需要 JSON,我們可以定義請求的標頭信息。
在這里插入圖片描述

取得線程信息、HTTP 請求信息和標頭信息后,您就可以運行 JMeter,最終會看到同時參照 Web 應用程序和數據庫而推進的大量活動。

同樣,此示例的很多內容都會留給您自行想象,因為要想看到無服務器實例的擴展優勢,您就需要開發過程中難以模擬的大量突發流量。無論如何,這個示例應該能給您帶來一些啟發。

結論

從上面的示例可以看到,利用 MongoDB Atlas 開發可以多么快速,其還能為您免去親自調整集群大小的負擔。使用 MongoDB Atlas 無服務器實例后,您的數據庫能夠適當擴展以滿足應用程序需求,且您只需為具體需求付費。這樣就不必為不間斷運行且大小并不合適的集群付費。它還能為您節省時間,不必對集群進行大小調整。

無論您使用的是 Atlas 無服務器實例還是預先配置的共享或專用集群,此示例中的代碼都能發揮應有作用。

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

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

相關文章

【javascript】快速入門javascript

本文前言及說明 適合學過一門語言有一定基礎的人看。 省略最初學習編程時的各種編程重復的基礎知識。 javascript簡介 編程語言(主前端) 用途:主web前后端,游戲,干別人網站 優點:速度快,瀏…

一文掃盲:室內導航系統的應用場景和技術實現(入門級)

hello,我是貝格前端工場,之間搞過一些室內導航項目,有2D也有3D的,算是有些經驗,這里給大家分享一下室內導航的基本嘗試,歡迎老鐵們點贊、關注,如有需求可以私信我們。 一、室內導航是什么 室內…

Vue開發實例(十)Tabs標簽頁打開、關閉與路由之間的關系

創建標簽頁 一、創建標簽頁二、點擊菜單展示新標簽頁1、將標簽數據作為全局使用2、菜單點擊增加標簽頁3、處理重復標簽4、關閉標簽頁 三、點擊標簽頁操作問題1:點擊標簽頁選中菜單進行高亮展示問題2:點擊標簽頁路由也要跳轉 四、解決bug 先展示最終效果 …

Android 基礎入門 基礎簡介

1. 觀察App運行日志 2.Android 開發設計的編程語言 koltin Java c c 3.工程目錄結構 4.Gradle 5.build.gradle 文件解析 plugins {id("com.android.application")//用了哪些插件 主配置文件版本控制 所以這里不用寫版本 }android {namespace "com.tiger.myap…

【C++】每周一題——2024.3.3(手滑再寫一篇)

題目 Cpp 【問題描述】 輸入一個由若干個以空格分隔的單詞組成的英文文章,求文章中最短的單詞(文章以英文句點”.”結束,且字符數不超過200). 【輸入格式】 一行,表示輸入的英文文章。 【輸出格式】 一行,表…

反向代理與負載均衡

目錄 反向代理 負載均衡 反向代理 代理角色: 正常情況下,客戶端(如瀏覽器)直接與服務器通信,但在反向代理中,Nginx充當客戶端和服務器之間的中介。客戶端向Nginx發送請求,而Nginx負責將請求轉…

基于springboot+vue的二手車交易系統

博主主頁:貓頭鷹源碼 博主簡介:Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰,歡迎高校老師\講師\同行交流合作 ?主要內容:畢業設計(Javaweb項目|小程序|Pyt…

金三銀四,風控建模面試全攻略:從簡歷準備到面試技巧

隨著春天的到來,招聘市場的 “金三銀四” 也悄然而至。公眾號的小伙伴問我有沒有面試相關指導課程,上完課后,把整理的部分材料通過文章分享給更多有需要的朋友。預祝大家順利獲得心儀的職位。本文將從簡歷準備、面試注意事項以及高頻面試問題三個方面,為你提供一份全面的風…

字符串判空錯誤

字符串判空錯誤 前端傳來的請求數據,若用只用String為null判斷,則忽略了str“”的情況,此時str不空,但str.length()0 RequestMapping(path "/add", method RequestMethod.POST)ResponseBodypublic String addDiscuss…

C++進階(二) 多態

一、多態的概念 多態的概念:通俗來說,就是多種形態, 具體點就是去完成某個行為,當不同的對象去完成時會 產生出不同的狀態。舉個栗子:比如買票這個行為,當普通人買票時,是全價買票;學…

Linux 查詢端口被占用命令

Linux 查詢端口被占用命令 1、lsof -i:端口號 用于查看某一端口的占用情況,比如查看8000端口使用情況,lsof -i:8000 lsof -i:8080:查看8080端口占用 lsof abc.txt:顯示開啟文件abc.txt的進程 lsof -c abc:顯示abc進…

Java中的List

List集合的特有方法 方法介紹 方法名描述void add(int index,E element)在此集合中的指定位置插入指定的元素E remove(int index)刪除指定索引處的元素,返回被刪除的元素E set(int index,E element)修改指定索引處的元素,返回被修改的元素E get(int inde…

動態規劃5,粉刷房子,買賣股票的最佳時期

粉刷房子 思路: 1.經驗題目要求 dp[i][0] 表示:粉刷到 i 位置的時候,最后一個位置粉刷上紅色,此時的最小花費。 dp[i][1] 表示:粉刷到 i 位置的時候,最后一個位置粉刷上藍色,此時的最小花費。…

mybatis開發一個分頁插件、mybatis實現分頁、mybatis攔截器

mybatis開發一個分頁插件、mybatis實現分頁、mybatis攔截器 通過官網的mybatis插件說明可知,我們可以通過攔截器進行開發一個插件。 例如這樣的: UserMapper mapper sqlSession.getMapper(UserMapper.class);// 開始分頁MagicPage.startPage(1, 3);//…

Javascript:類型轉換

一、前言 prompt與表達單取過來的值默認為string類型 二、正文 1.隱式轉換 某些運算符被執行的時候,系統內部自動將數據類型進行轉換。 規則: 好兩邊只要有一個是字符串,都會把另外一個轉成字符串。 除了以外的算術運算符,比如…

Linux:線程的概念

個人主頁 : 個人主頁 個人專欄 : 《數據結構》 《C語言》《C》《Linux》 文章目錄 前言一、線程的概念線程代碼的簡單示例 總結 前言 本文是對于線程概念的知識總結 一、線程的概念 在課本上,線程是比進程更輕量級的一種指向流 或 線程是在…

VS Code 的粘性滾動預覽 - 類似于 Excel 的凍結首行

VS Code 的粘性滾動預覽 - 類似于 Excel 的凍結首行功能,即滾動 UI 顯示當前源代碼范圍。便于在代碼行數比較多的時候更好的知道自己所在的位置。粘性滾動UI 顯示用戶在滾動期間所處的范圍,將顯示編輯器頂部所在的類/接口/命名空間/函數/方法/構造函數&a…

4、Linux-常用命令(二)

目錄 一、搜索命令 1、命令搜索命令 2、文件搜索命令find。格式:find [搜索范圍] [搜索條件]。 3、字符串搜索命令grep 二、幫助命令 1、man【詳細的幫助】 2、--help【簡要的幫助】 三、壓縮與解壓命令 1、.zip格式 2、.gz格式 3、打包 四、關機和重啟命…

【大廠AI課學習筆記NO.57】(10)分類任務的評價指標

我們實際做的是一個分類任務。 在人工智能深度學習項目中,分類任務是指一種特定的任務類型,即預測結果是離散值的任務。具體來說,分類任務的目標是將輸入數據劃分到不同的類別中。這些類別可以是二分類(如垃圾郵件分類&#xff0c…

理解這幾個安全漏洞,你也能做安全測試

01 短信炸彈 1、漏洞描述 短信轟炸攻擊是常見的一種攻擊,攻擊者通過網站頁面中所提供的發送短信驗證碼的功能處,通過對其發送數據包的獲取后,進行重放,如果服務器短信平臺未做校驗的情況時,系統會一直去發送短信&…