亚马逊AWS官方博客
在 Amazon DocumentDB 中实现 MongoDB 4.0 兼容性与事务处理能力
Original Link: https://amazonaws-china.com/cn/blogs/database/introducing-amazon-documentdb-with-mongodb-compatibility-4-0/
Amazon DocumentDB (兼容MongoDB)是一项快速、可扩展、具备高可用性的全托管文档数据库服务,可支持MongoDB工作负载。今天,我们宣布Amazon DocumentDB正式获得MongoDB 4.0兼容能力。通过此次升级,现在您可以使用原子性、一致性、隔离性与持久性(ACID)事务,为数据库或集群打开变更流游标等等。关于Amazon DocumentDB 4.0的完整发行版说明,请参阅MongoDB 4.0兼容性。
在本文中,我们将共同了解Amazon DocumentDB 4.0当中的新增功能,并向您展示如何在AWS Cloud9环境之上使用Amazon DocumentDB 4.0及事务。
Amazon DocumentDB 4.0中的新特性
以下是Amazon DocumentDB 4.0引入的各项主要功能特性。要查看新功能的完整列表,请参阅MongoDB 4.0兼容性。
- ACID事务– Amazon DocumentDB现可支持跨多个文档、语句、集合及数据库执行事务。事务支持使您能够跨Amazon DocumentDB集群内的一个或多个文档执行ACID操作,从而简化应用开发流程。关于更多详细信息,请参阅 事务。
- 变更流 – 现在,您可以在集群层级 (client.watch() 或 mongo.watch()) 或者数据库层级(db.watch())开启变更流。您也可以指定一个 startAtOperationTime以打开变更流游标,并将变更流的保留周期延长至7天(之前最多为24小时)。关于更多详细信息,请参阅 在Amazon DocumentDB上使用变更流。
- AWS DMS – 现在,您可以使用 AWS Database Migration Service (AWS DMS)将MongoDB 4.0工作负载迁移至Amazon DocumentDB 4.0。AWS DMS现可支持以MongoDB 4.0为源、以Amazon DocumentDB 4.0为目标,并可以Amazon DocumentDB 3.6为源完成由3.6版本到4.0版本的升级。关于更多详细信息,请参阅 将Amazon DocumentDB 作为AWS Database Migration Service的目标。
- 监控 – 通过添加事务,现在您可以使用五项新的 Amazon CloudWatch 指标: TransactionsOpen, TransactionsOpenMax, TransactionsAborted, TransactionsStarted 以及 TransactionsCommitted, 外加 currentOp, ServerStatus与 profiler等新字段。关于更多详细信息,请参阅 使用CloudWatch监控Amazon DocumentDB。
- 性能与索引 – 新版本中还包含多项性能与索引改进:可在 $lookup 聚合阶段使用索引、可直接由索引(所涉及查询)提供带有投射的 find() 查询、可通过findAndModify API使用hint() 、对 $addToSet 操作符做出性能优化,同时改进并缩小了总体索引大小。关于更多详细信息,请参阅 发布说明。
- 操作符 – 我们增加了对以下新聚合操作符的支持: $ifNull, $replaceRoot, $setIsSubset, $setInstersection, $setUnion以及 $setEquals。关于更多详细信息,请参阅支持的MongoDB API、操作与数据类型。
- 基于角色的访问控制 (RBAC) – 使用 ListCollection 与 ListDatabase命令,您现在可以选择使用 authorizedCollections 与 authorizedDatabases参数以允许用户列出其有权访问的集合与数据库,因此不再需要为此分别使用 listCollections 与 listDatabase角色。用户还可以直接结束自己的游标,无需使用 KillCursor 角色。关于更多详细信息,请参阅 使用基于角色的访问控制(内置角色)限制数据库访问行为。
Amazon DocumentDB 4.0与事务入门指南
第一步是在您的默认Amazon Virtual Private Cloud (Amazon VPC)当中创建一个AWS Cloud9环境外加一套Amazon DocumentDB集群。关于创建默认VPC的操作说明,请参阅 Amazon VPC入门指南。本文将演示如何使用mongo shell从AWS Cloud9环境接入Amazon DocumentDB集群并运行事务。在创建AWS资源时,我们建议您遵循AWS身份与访问管理(IAM)最佳实践。
下图所示,为本演练中的最终架构。
在本演练中,请使用特定区域内的默认VPC。关于更多详细信息,请参阅创建Virtual Private Cloud (VPC)。
创建AWS Cloud9环境
要创建AWS Cloud9环境,请完成以下操作步骤:
- 在AWS Cloud9 控制台上,选择 Create environment。
- 在 Environment name and description之下的 Name部分,为环境输入名称。本文将环境命名为DocumentDBCloud9。
- 选择 Next step。
- 在Configure settings部分,直接使用全部默认选项。
- 选择 Next step。
- 在Review部分, 选择 Create environment。
AWS Cloud9环境的置备最多可能需要3分钟。在完成之后,您会看到以下命令提示符。
您将被重新定向至命令提示符,在这里安装mongo shell并接入Amazon DocumentDB集群。
创建安全组
在此步骤中,您将使用Amazon Elastic Compute Cloud (Amazon EC2)创建一个新的安全组,借此从AWS Cloud9环境中的端口27017(Amazon DocumentDB的默认端口)连接至AMazno DocumentDB集群。
- 在 Amazon EC2控制台的 Network & Security之下, 选择 Security groups。
- 选择 Create security group。
- 在Security group name部分,输入demoDocDB。
- 在 VPC部分,接受使用您的默认VPC。
- 在Description部分,输入相应描述。
- 在Inbound rules部分, 选择 Add rule。
- 在Type部分, 选择 Custom TCP Rule。
- 在Port Range部分,输入27017。源安全组为您刚刚为AWS Cloud9环境创建的安全组。
- 要查看可用安全组列表,请在目标字段内输入 cloud9。
- 选择名称为 aws-cloud9-<environment name>的安全组。
- 接受所有默认选项,而后选择 Create security group。
下图所示,为您在此步骤中创建的安全组,以及在创建AWS Cloud9环境时创建的AWS Cloud9安全组。
创建一套Amazon DocumentDB 4.0集群
要创建您的Amazon DocumentDB 4.0集群,请完成以下操作步骤:
- 在Amazon DocumentDB控制台上的Clusters页面中,选择 Create。
- 在Engine version部分, 选择默认版本 (4.0.0)。
- 在 Create Amazon DocumentDB cluster页面的 Instance class部分, 选择 t3.medium。
- 在Number of instances部分, 选择 1。用于将成本控制在最低水平。
- 其他设置全部保留为默认选项。
- 在Authentication部分,输入用户名与密码。
- 开启Show advanced settings。
- 在Network settings部分的VPC security groups当中, 选择 demoDocDB。
- 选择 Create cluster。
Amazon DocumentDB现在开始配置您的集群,这可能需要几分钟才能完成。当集群与实例状态皆显示为Available时,您即可接入该集群。在Amazon DocumentDB设置集群的过程中,请完成剩余步骤以接入Amazon DocumentDB集群。
安装4.0 mongo shell
现在,您可以安装mongo shell,并使用这款命令行实用工具接入并查询您的Amazon DocumentDB集群。
- 在AWS Cloud9r控制台的 Your environments之下, 选择 DocumentDBCloud9。
- 选择 Open IDE。
- 要安装4.0 mongo shell,请在命令提示符中使用以下命令创建repo文件:
echo -e “[mongodb-org-4.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/4.0/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc” | sudo tee /etc/yum.repos.d/mongodb-org-4.0.repo
- 完成之后,使用以下命令安装mongo shell:
sudo yum install -y mongodb-org-shell
传输层安全(TLS)协议将在Amazon DocumentDB集群上默认启用。关于更多详细信息,请参阅 管理Amazon DocumentDB Cluster TLS 设置。
- 要加密传输数据,请为Amazon DocumentDB 下载CA 证书,具体代码如下:
接入您的Amazon DocumentDB集群
现在,您可以接入自己的Amazon DocumentDB集群了。
-
- 在Amazon DocumentDB控制台的Clusters page上找到您的集群。本文中使用 docdb-2020-10-09-21-45-11集群。
- 选择您所创建的集群。
- 复制其对应的连接字符串。请忽略掉 <insertYourPassword> 部分,以便在接入时由mongo shell提示您输入密码。这样,您就不必以明文形式输入密码。
- 在输入密码时,您会看到 rs0:PRIMARY> 提示,代表您已成功接入Amazon DocumentDB集群。
关于故障排查的更多详细信息,请参阅Amazon DocumentDB故障排查。
在接入mongo shell之后,您可以使用以下命令确认当前版本(4.0.0):
db.version()
输出结果如下:
4.0.0
使用事务
现在,您已经使用mongo shell成功接入集群了,接下来即可使用事务。这里我们使用典型的事务用例,即某人的账户中借钱,并将这笔钱存入另一人的账户当中。由于此用例需要使用数据库内的两项单独操作,因此我们希望两项操作在同一事务内完成并遵循ACID原则。在本演练中,我们从Bob的银行账户向Alice的银行账户转账400美元。两个账户的初始余额都为500美元。
- 为了从空集合开始,我们首先将账户集合删除:
db.account.drop()
您将得到以下输出结果:
{true, false}
- 将数据插入集合以代表Bob的账户:
您将得到以下输出结果:
- 将数据插入集合以代表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.find()
您将得到以下输出结果:
- 如果您在事务之外查看,则会发现更新结果尚未显示:
db.account.find()
您将得到以下输出结果:
- 提交事务并关闭会话:
- 要查看更新结果,请使用以下代码:
db.account.find()
您将得到以下输出结果:
资源清理
在完成演练之后,您应停止Amazon DocumentDB集群或将其删除以降低成本。在默认情况下,经过30分钟的闲置周期,您的AWS Cloud9环境将停止运行基础EC2实例以帮助节约成本。
总结
本文向您介绍了Amazon DocumentDB中的MongoDB 4.0兼容性,同时展示了如何通过创建AWS Cloud9环境、安装mongo 4.0 shell、创建Amazon DocumentDB集群、接入集群并通过简单用例使用Amazon DocumentDB 4.0与事务。关于更多详细信息,请参阅MongoDB 4.0兼容性与事务。关于最新发布内容与博文的详细信息,请参阅Amazon DocumentDB (兼容MongoDB )资源。