案例中心

在 Amazon DocumentDB 弹性集群上提升写入性能 数据库博客

2026-01-27 13:25:19
26次

提升 Amazon DocumentDB 弹性集群的写入性能

作者 Sreejit Unny 和 Tim Callaghan 于 2024 年 4 月 16 日发布于 Amazon DocumentDB,中级200级,技术类操作指南永久链接评论区 分享

关键要点

Amazon DocumentDB 弹性集群支持数百万的读写操作和 PB 等级的存储。通过增加分片数,可以显著提升写入吞吐量,达到每秒超过一百万的插入操作。配置合适的客户端环境对于基准测试的成功至关重要。

Amazon DocumentDB (与 MongoDB 兼容) 是一款可扩展、高耐用性、完全托管的文档数据库服务,简化了在云端存储、查询和索引原生 JSON 工作负荷的过程。Amazon DocumentDB 将计算和存储解耦,使每个组件能够独立扩展。它支持两种类型的集群: 基于实例的集群 和 弹性集群。

在本文中,我们将展示 Amazon DocumentDB 弹性集群通过增加分片数量来扩展写入负载的能力。

Amazon DocumentDB 弹性集群

Amazon DocumentDB 弹性集群支持每秒数百万的读取和写入操作,并具备 PB 级存储能力。弹性集群简化了与 Amazon DocumentDB 的交互,自动管理底层基础设施,消除了选择、管理或升级实例的需要。与基于实例的集群相比,弹性集群通过将数据库负载分布到多个分片,允许你在写入吞吐量和存储方面超越实例的限制。每个分片拥有独立的计算和存储卷,并分布在三个可用区内。Amazon DocumentDB 弹性集群使用基于哈希的算法对集合进行分片,并将数据划分为更小的数据集。最大可以部署 32 个分片。每个实例的 vCPU 可在 264 之间按 2 的幂次配置。它提供了灵活性,可以根据需要改变分片数量扩展或缩减以及 vCPUs 数量上调或下调。

下面的图展示了 Amazon DocumentDB 弹性集群的架构:

基准测试配置

我们使用了一个名为 bench02py 的简单插入基准测试应用,源代码可在 GitHub 上获得,以测量 Amazon DocumentDB 基于实例和弹性集群的性能。该应用创建并加载一个包含 1 KB 文本字段和三个二级索引的集合。应用支持可定制,支持具有更大文本字段和不同数量的二级索引的集合。

我们的集合模式如下:

customerId int(10000)productId int(1000000)quantity int(100000)orderDate date()textField string

我们使用 customerId 作为弹性集群的分片键。分片键是你在分片集合中 JSON 文档中的一个必填字段,用于分配读写流量到对应的分片。

我们使用以下二级索引:

jsonidxcustomerIdorderDate {customerId orderDate}idxcustomerIdproductId {customerId productId}idxproductIdorderDate {productId orderDate}

为了在各集群间测试性能,我们使用了以下测试配置:

基础设施基于实例的集群弹性1弹性2弹性4弹性8弹性16基准测试持续时间300 秒300 秒300 秒300 秒300 秒300 秒批次大小100010001000100010001000并发处理数1281281282565121024

以下部分将详细介绍设置客户端环境和在基于实例和弹性集群上运行基准测试的步骤。

设置客户端环境

我们的测试使用了一台 m6i24xlarge 亚马逊弹性计算云 (Amazon EC2) 实例,配备 96 个 vCPU 和 375 Gbps 的网络带宽,确保基准测试客户端不会成为瓶颈。用来运行应用的客户端机器需满足以下前提条件:

Python 37, pymongoMongo shell

配置并使用应用程序,请按照以下操作进行:

在客户端克隆 GitHub 仓库:

bash git clone https//githubcom/awssamples/amazondocumentdbsamples cd amazondocumentdbsamples/samples/pythonbench02

下载用于认证集群的 Amazon DocumentDB 证书授权CA证书:

bash wget https//truststorepkirdsamazonawscom/global/globalbundlepem

在 Amazon DocumentDB 基于实例的集群上运行基准测试

我们配置了一个基于实例的 Amazon DocumentDB 集群,包括一个主实例和一个副本实例。我们选择 dbr6g8xlarge 实例,配备 32 个 vCPU,以及 Amazon DocumentDB 引擎版本 50。应用在 128 个客户端进程和 1000 的批量大小下运行了 5 分钟。代码如下:

bashpython bench02py uri mongodb//[DOCDBUSER][DOCDBPASS]@[DOCDBENDPOINT]27017/tls=trueamptlsCAFile=globalbundlepemampreplicaSet=rs0ampreadPreference=secondaryPreferredampretryWrites=false processes 128 database iibench collection test runseconds 300 batchsize 1000 dropcollection filename instance

要配置基于实例的 Amazon DocumentDB 集群,请参阅 创建 Amazon DocumentDB 集群。

在 Amazon DocumentDB 弹性集群上运行基准测试

我们配置了五个弹性集群,分别拥有 1、2、4、8 和 16 个分片,每个分片的 vCPU 容量为 32。应用在不同的弹性集群上运行,批量大小为 1000,持续 5 分钟,同时改变每个弹性集群的并发数。对弹性集群,我们指定参数 shard,以确保使用 customerId 作为分片键创建分片集合。代码如下:

bashpython bench02py uri mongodb//[DOCDBUSER][DOCDBPASS]@[DOCDBENDPOINT]27017/tls=true processes 128 database iibench collection test runseconds 300 batchsize 1000 dropcollection shard filename elastic

要配置 Amazon DocumentDB 弹性集群,请参阅 创建弹性集群。

测试结果

基准测试结果如下:

集群实例弹性1弹性2弹性4弹性8弹性16客户端进程1281281282565121024吞吐量每秒插入98319802161511592842086022551215902

在下图中,x 轴代表 Amazon DocumentDB 基于实例的集群和不同的弹性集群配置及其相应的并发数客户端进程。y 轴代表每秒的插入吞吐量。

一元机场网线

单分片弹性集群的吞吐量低于基于实例的集群,这是可以预料的,主要归因于弹性集群架构中的请求路由器所带来的开销。然而,通过增加弹性集群的分片数量,我们实现了写入的扩展性。在 16 个分片的弹性集群上,我们的写入吞吐量达到了每秒超过一百万的插入。

结论

Amazon DocumentDB 弹性集群分配数据和查询到多个分片的能力使其能够支持具有高吞吐量需求和 PB 级存储能力的工作负载。随着负载的增加,你可以添加额外的分片以满足应用的更高需求,如果负载降低,则可以移除分片。本文展示了通过增加分片数量,Amazon DocumentDB 弹性集群能够支持数百万每秒的写入操作,从而满足高写入需求的工作负载。

在 Amazon DocumentDB 弹性集群上提升写入性能 数据库博客

AWS 欢迎你的反馈。请在评论区留下你的意见或问题。

作者介绍

Sreejit Unny 是 AWS 的高级数据库解决方案架构师。他专注于帮助客户迁移和现代化 AWS 上的数据库,紧密与客户合作,设计符合当前和未来业务需求的可靠、安全以及高性能解决方案。

Tim Callaghan 是 AWS 的首席 DocumentDB 专家架构师。他乐于与希望现代化现有数据驱动应用程序的客户合作,并帮助其构建新应用。在加入 AWS 之前,他在关系型和 NoSQL 数据库领域有超过 30 年的生产和使用经验。

加载评论

本文网址: https://www.qnzmw.com/works/8.html
 Copyright © 一元加速器(中国)官方网站|一元加速器 2024 版权所有 All rights reserved 加速器ios