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.复制其对应的连接字符串。请忽略掉
您的连接字符串应类似于以下截屏所示。
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...
本篇作者