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操作,从而简化利用开发流程。对于更多详细信息,请参阅事务。
- 事务
https://docs.aws.amazon.com/d...
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操作符做出性能优化,同时改良并放大了总体索引大小。对于更多详细信息,请参阅公布阐明。
- 公布阐明
https://docs.aws.amazon.com/d...
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
- 下载CA证书
https://s3.amazonaws.com/rds-...
接入您的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
亚马逊云科技首席产品经理