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
亚马逊云科技首席产品经理