Amazon DocumentDB(相容MongoDB)是一項快速、可擴充套件、具備高可用性的全託管文件資料庫服務,可支援MongoDB工作負載。今天,我們宣佈Amazon DocumentDB正式獲得MongoDB 4.0相容能力。通過此次升級,現在您可以使用原子性、一致性、隔離性與永續性(ACID)事務,為資料庫或叢集開啟變更流遊標等等。關於Amazon DocumentDB 4.0的完整發行版說明,請參閱MongoDB 4.0相容性。
- Amazon DocumentDB(相容MongoDB)
https://aws.amazon.com/cn/doc... - MongoDB 4.0相容性
https://docs.aws.amazon.com/d...
在本文中,我們將共同瞭解Amazon DocumentDB 4.0當中的新增功能,並向您展示如何在Amazon Cloud9環境之上使用Amazon DocumentDB 4.0及事務。
? 想要了解更多亞馬遜雲科技最新技術釋出和實踐創新,敬請關注在上海、北京、深圳三地舉辦的2021亞馬遜雲科技中國峰會!點選圖片報名吧~
Amazon DocumentDB 4.0中的新特性
以下是Amazon DocumentDB 4.0引入的各項主要功能特性。要檢視新功能的完整列表,請參閱MongoDB 4.0相容性。
- MongoDB 4.0相容性
https://docs.aws.amazon.com/d...
ACID事務–Amazon DocumentDB現可支援跨多個文件、語句、集合及資料庫執行事務。事務支援使您能夠跨Amazon DocumentDB叢集內的一個或多個文件執行ACID操作,從而簡化應用開發流程。關於更多詳細資訊,請參閱事務。
1.變更流–現在,您可以在叢集層級 (client.watch()或 mongo.watch()) 或者資料庫層級(db.watch())開啟變更流。您也可以指定一個 startAtOperationTime以開啟變更流遊標,並將變更流的保留週期延長至7天(之前最多為24小時)。關於更多詳細資訊,請參閱在Amazon DocumentDB上使用變更流。
- 在Amazon DocumentDB上使用變更流
https://docs.aws.amazon.com/d...
2.Amazon DMS–現在,您可以使用Amazon Database Migration Service (Amazon DMS)將MongoDB 4.0工作負載遷移至Amazon DocumentDB 4.0。Amazon DMS現可支援以MongoDB 4.0為源、以Amazon DocumentDB 4.0為目標,並可以Amazon DocumentDB 3.6為源完成由3.6版本到4.0版本的升級。關於更多詳細資訊,請參閱 將Amazon DocumentDB 作為Amazon Database Migration Service的目標。
- Amazon Database Migration Service
https://aws.amazon.com/cn/dms/ - 將Amazon DocumentDB作為Amazon Database Migration Service的目標
https://docs.aws.amazon.com/d...
3.監控–通過新增事務,現在您可以使用五項新的Amazon CloudWatch指標:
TransactionsOpen, TransactionsOpenMax, TransactionsAborted, TransactionsStarted 以及 TransactionsCommitted, 外加 currentOp, ServerStatus與 profiler等新欄位。關於更多詳細資訊,請參閱使用Amazon CloudWatch監控Amazon DocumentDB。
- Amazon CloudWatch
https://aws.amazon.com/cn/clo... - 使用Amazon CloudWatch監控Amazon DocumentDB
https://docs.aws.amazon.com/d...
4.效能與索引–新版本中還包含多項效能與索引改進:可在 $lookup聚合階段使用索引、可直接由索引(所涉及查詢)提供帶有投射的find()查詢、可通過findAndModify API使用hint()、對$addToSet操作符做出效能優化,同時改進並縮小了總體索引大小。關於更多詳細資訊,請參閱釋出說明。
5.操作符–我們增加了對以下新聚合操作符的支援: $ifNull, $replaceRoot, $setIsSubset, $setInstersection, $setUnion以及 $setEquals。關於更多詳細資訊,請參閱支援的MongoDB API、操作與資料型別。
- 支援的MongoDB API、操作與資料型別
https://docs.aws.amazon.com/d...
6.基於角色的訪問控制(RBAC)–使用ListCollection與ListDatabase命令,您現在可以選擇使用authorizedCollections與authorizedDatabases引數以允許使用者列出其有權訪問的集合與資料庫,因此不再需要為此分別使用listCollections與listDatabase角色。使用者還可以直接結束自己的遊標,無需使用KillCursor角色。關於更多詳細資訊,請參閱使用基於角色的訪問控制(內建角色)限制資料庫訪問行為。
- 使用基於角色的訪問控制(內建角色)限制資料庫訪問行為
https://docs.aws.amazon.com/d...
Amazon DocumentDB4.0與事務入門指南
第一步是在您的預設Amazon Virtual Private Cloud(Amazon VPC)當中建立一個Amazon Cloud9環境外加一套Amazon DocumentDB叢集。關於建立預設VPC的操作說明,請參閱Amazon VPC入門指南。本文將演示如何使用mongo shell從Amazon Cloud9環境接入Amazon DocumentDB叢集並執行事務。在建立Amazon資源時,我們建議您遵循Amazon身份與訪問管理(IAM)最佳實踐。
- Amazon Virtual Private Cloud
https://amazonaws-china.com/vpc/ - Amazon VPC
https://docs.aws.amazon.com/v...
下圖所示,為本演練中的最終架構。
在本演練中,請使用特定區域內的預設VPC。關於更多詳細資訊,請參閱建立Virtual Private Cloud (VPC)。
- 建立Virtual Private Cloud (VPC)
https://docs.aws.amazon.com/A...
建立Amazon Cloud9環境
要建立Amazon Cloud9環境,請完成以下操作步驟:
1.在Amazon Cloud9控制檯上,選擇 Create environment。
- Amazon Cloud9控制檯
https://console.aws.amazon.co...
2.在Environment name and description之下的 Name部分,為環境輸入名稱。本文將環境命名為Amazon DocumentDB Cloud9。
3.選擇Next step。
4.在Configure settings部分,直接使用全部預設選項。
5.選擇Next step。
6.在Review部分, 選擇Create environment。
Amazon Cloud9環境的置備最多可能需要3分鐘。在完成之後,您會看到以下命令提示符。
您將被重新定向至命令提示符,在這裡安裝mongo shell並接入Amazon DocumentDB叢集。
建立安全組
在此步驟中,您將使用Amazon Elastic Compute Cloud(Amazon EC2)建立一個新的安全組,藉此從Amazon Cloud9環境中的埠27017(Amazon DocumentDB的預設埠)連線至Amazon DocumentDB叢集。
- Amazon Elastic Compute Cloud
https://amazonaws-china.com/ec2
1.在Amazon EC2控制檯的Network & Security之下, 選擇Security groups。
- Amazon EC2控制檯
https://console.aws.amazon.co...
2.選擇Create security group。
3.在Security group name部分,輸入demoDocDB。
4.在 VPC部分,接受使用您的預設VPC。
5.在Description部分,輸入相應描述。
6.在Inbound rules部分, 選擇Add rule。
7.在Type部分, 選擇Custom TCP Rule。
8.在Port Range部分,輸入27017。源安全組為您剛剛為Amazon Cloud9環境建立的安全組。
9.要檢視可用安全組列表,請在目標欄位內輸入cloud9。
10.選擇名稱為amazon-cloud9-的安全組。
11.接受所有預設選項,而後選擇Create security group。
下圖所示,為您在此步驟中建立的安全組,以及在建立Amazon Cloud9環境時建立的Amazon Cloud9安全組。
建立一套 Amazon DocumentDB 4.0叢集
要建立您的Amazon DocumentDB 4.0叢集,請完成以下操作步驟:
1.在Amazon DocumentDB控制檯上的Clusters頁面中,選擇Create。
- Amazon DocumentDB控制檯
https://signin.aws.amazon.com...
2.在Engine version部分, 選擇預設版本 (4.0.0)。
3.在Create Amazon DocumentDB cluster頁面的Instance class部分, 選擇 t3.medium。
4.在Number of instances部分, 選擇1。用於將成本控制在最低水平。
5.其他設定全部保留為預設選項。
6.在Authentication部分,輸入使用者名稱與密碼。
7.開啟Show advanced settings。
8.在Network settings部分的VPC security groups當中, 選擇demoDocDB。
9.選擇Create cluster。
Amazon DocumentDB現在開始配置您的叢集,這可能需要幾分鐘才能完成。當叢集與例項狀態皆顯示為Available時,您即可接入該叢集。在Amazon DocumentDB設定叢集的過程中,請完成剩餘步驟以接入Amazon DocumentDB叢集。
安裝4.0 mongo shell
現在,您可以安裝mongo shell,並使用這款命令列實用工具接入並查詢您的Amazon DocumentDB叢集。
1.在Amazon Cloud9r控制檯的Your environments之下, 選擇Amazon DocumentDBCloud9。選擇Open IDE。
2.要安裝4.0 mongo shell,請在命令提示符中使用以下命令建立repo檔案:echo -e “[mongodb-org-4.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/...\ngpgcheck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/stati...” | sudo tee /etc/yum.repos.d/mongodb-org-4.0.repo
3.完成之後,使用以下命令安裝mongo shell:sudo yum install-y mongodb-org-shell
傳輸層安全(TLS)協議將在Amazon DocumentDB叢集上預設啟用。關於更多詳細資訊,請參閱管理Amazon DocumentDB Cluster TLS設定。
- 管理Amazon DocumentDB Cluster TLS設定
https://docs.aws.amazon.com/d...
要加密傳輸資料,請為Amazon DocumentDB下載CA證照,具體程式碼如下:
wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
接入您的Amazon DocumentDB叢集
現在,您可以接入自己的Amazon DocumentDB叢集了。
1.在Amazon DocumentDB控制檯的Clusters page上找到您的叢集。本文中使用 docdb-2020-10-09-21-45-11叢集。
2.選擇您所建立的叢集。
3.複製其對應的連線字串。請忽略掉<insertYourPassword>部分,以便在接入時由mongo shell提示您輸入密碼。這樣,您就不必以明文形式輸入密碼。
您的連線字串應類似於以下截圖所示。
4.在輸入密碼時,您會看到rs0:PRIMARY> 提示,代表您已成功接入Amazon DocumentDB叢集。
關於故障排查的更多詳細資訊,請參閱Amazon DocumentDB故障排查。
- Amazon DocumentDB故障排查
https://docs.aws.amazon.com/d...
在接入mongo shell之後,您可以使用以下命令確認當前版本(4.0.0):
db.version()
輸出結果如下:
4.0.0
使用事務
現在,您已經使用mongo shell成功接入叢集了,接下來即可使用事務。這裡我們使用典型的事務用例,即某人的賬戶中借錢,並將這筆錢存入另一人的賬戶當中。由於此用例需要使用資料庫內的兩項單獨操作,因此我們希望兩項操作在同一事務內完成並遵循ACID原則。在本演練中,我們從Bob的銀行賬戶向Alice的銀行賬戶轉賬400美元。兩個賬戶的初始餘額都為500美元。
- 為了從空集合開始,我們首先將賬戶集合刪除:
db.account.drop()
您將得到以下輸出結果:
{true, false}
- 將資料插入集合以代表Bob的賬戶:
db.account.insert({"_id": 1, "name": "Bob", "balance": 500.00});
您將得到以下輸出結果:
WriteResult({ "nInserted" : 1 })
- 將資料插入集合以代表Alice的賬戶:
db.account.insert({“_id”: 2, “name”: “Alice”, “balance”: 500.00});
您將得到以下輸出結果:
WriteResult({ “nInserted” : 1 })
- 要啟動一項事務,請為賬戶建立會話與會話物件:
var mySession =getMongo().startSession();6. var mySessionObject = mySession.getDatabase('test').getCollection('account');
mySession.startTransaction({readConcern: {level: 'snapshot'}, writeConcern: {w: 'majority'}});
- 在此事務中,從Bob賬戶處借取400美元:
mySessionObject.updateOne({"_id": 2}, {"$inc": {"balance": 400}});
您將得到以下輸出結果:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
- 同樣的,向Alice賬戶中增加400美元:
mySessionObject.updateOne({"_id": 1}, {"$inc": {"balance": -400}});
您將得到以下輸出結果:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
- 在此事務中,您可以使用以下程式碼檢視兩個賬戶的更新狀態:
mySessionObject.find()
您將得到以下輸出結果:
{ "_id" : 2, "name" : "Alice", "balance" : 900 }
{ "_id" : 1, "name" : "Bob", "balance" : 100 }
- 如果您在事務之外檢視,則會發現更新結果尚未顯示:
db.account.find()
您將得到以下輸出結果:
{ "_id" : 1, "name" : "Alice", "balance" : 500 }
{ "_id" : 2, "name" : "Bob", "balance" : 500 }
- 提交事務並關閉會話:
- 要檢視更新結果,請使用以下程式碼:
db.account.find()
您將得到以下輸出結果:
{ "_id" : 2, "name" : "Alice", "balance" : 900 }
{ "_id" : 1, "name" : "Bob", "balance" : 100 }
資源清理
在完成演練之後,您應停止Amazon DocumentDB叢集或將其刪除以降低成本。在預設情況下,經過30分鐘的閒置週期,您的Amazon Cloud9環境將停止執行基礎EC2例項以幫助節約成本。
總結
本文向您介紹了Amazon DocumentDB中的MongoDB 4.0相容性,同時展示瞭如何通過建立Amazon Cloud9環境、安裝mongo 4.0 shell、建立Amazon DocumentDB叢集、接入叢集並通過簡單用例使用Amazon DocumentDB 4.0與事務。關於更多詳細資訊,請參閱MongoDB 4.0相容性與事務。關於最新發布內容與博文的詳細資訊,請參閱Amazon DocumentDB (相容MongoDB )資源。
- MongoDB 4.0相容性
https://docs.aws.amazon.com/d... - 事務
https://docs.aws.amazon.com/d... - Amazon DocumentDB (相容MongoDB )資源
https://aws.amazon.com/docume...
本篇作者
Joseph Idziorek
亞馬遜雲科技首席產品經理