本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
数据分层
使用 r6gd 系列节点类型的集群的数据在内存和本地SSD(固态驱动器)存储之间分层。数据分层为Valkey和Redis OSS 工作负载提供了一种新的性价比选项,它除了在内存中存储数据外,还在每个群集节点中使用成本较低的固态硬盘 (SSDs)。类似于其他节点类型,写入 r6gd 节点的数据持久存储在多可用区事务日志中。数据分层非常适合定期访问其总数据集的20%的工作负载,也适用于在访问数据时可以容忍额外延迟的应用程序。SSD
对于启用了数据分层功能的集群,MemoryDB 会监控集群所存储每个项目的最近访问时间。当可用内存 (DRAM) 被完全消耗时,MemoryDB 使用最近最少使用的 (LRU) 算法将不经常访问的项目自动从内存移动到。SSD随后访问上的SSD数据时,MemoryDB 会在处理请求之前自动异步将其移回内存。如果您的工作负载只会经常访问部分数据,则数据分层将是经济高效地扩缩容量的极佳方法。
请注意,使用数据分层时,密钥本身始终保留在内存中,而LRU控制值在内存与磁盘上的位置。通常,在使用数据分层时,我们建议您的键大小小于值。
数据分层旨在将对应用程序工作负载的性能影响降至最低。例如,假设字符串值为 500 字节,与读取内存中数据的请求SSD相比,对存储在上的数据的读取请求通常会有 450 微秒的延迟。
使用最大的数据分层节点大小 (db.r6gd.8xlarge),您可以在单个 500 个节点的集群TBs中存储多达 500 个(使用 1 个只读副本时为 250 TB)。对于数据分层,MemoryDB 为每个节点预留 (DRAM) 内存的 19% 用于非数据用途。数据分层与 MemoryDB 支持的所有 Valkey 和 Redis OSS 命令以及数据结构兼容。使用此功能无需任何客户端更改。
最佳实践
我们建议您遵循以下最佳实操:
数据分层非常适合定期访问其总数据集的20%的工作负载,也适用于在访问数据时可以容忍额外延迟的应用程序。SSD
使用数据分层节点上的可用SSD容量时,我们建议值大小大于密钥大小。值大小不能大于 128MB;否则无法将其移动到磁盘。当项目在DRAM和之间移动时SSD,密钥将始终保留在内存中,并且只有值会被移动到该SSD层。
限制
数据分层功能存在以下限制:
您使用的节点类型必须属于 r6gd 系列,目前可在以下区域使用:
us-east-2
、us-east-1
、us-west-2
、us-west-1
、eu-west-1
、eu-west-3
、eu-central-1
、ap-northeast-1
、ap-southeast-1
、ap-southeast-2
、ap-south-1
、ca-central-1
和sa-east-1
。除非两个集群都为 r6gd 集群,否则不能将 r6gd 集群的快照还原到其他集群。
不能将使用数据分层功能的集群快照导出到 Amazon S3。
不支持无分支保存。
不支持将使用数据分层功能的集群(例如,使用 r6gd 节点类型的集群)扩缩至不使用数据分层功能的集群(例如,使用 r6g 节点类型的集群)。
数据分层仅支持
volatile-lru
、allkeys-lru
和noeviction
maxmemory 策略。大于 128 MiB 的项目不会移动到。SSD
数据分层定价
与 R6g 节点(仅限内存SSD)相比,R6gD 节点的总容量(内存+)高 5 倍,在以最大利用率运行时,可以帮助您节省 60% 以上的存储成本。有关更多信息,请参阅 MemoryDB 定价
监控
MemoryDB 提供了若干专用于监控使用数据分层功能的高性能集群的指标。要监控商品与之对DRAM比的比例SSD,您可以使用位于MemoryDB 的指标... 的CurrItems
指标 您可以按以下方式计算百分比:(CurrItems with Dimension: Tier = Memory * 100) / (CurrItems with no dimension filter)
。当内存中的项目百分比降至 5% 以下时,我们建议您考虑 扩展 MemoryDB 集群。
有关更多信息,请参阅 MemoryDB 的指标 中的适用于使用数据分层功能的 MemoryDB 集群的指标。
数据分层功能的使用
您可在创建集群时选择 r6gd 系列的节点类型(例如 db.r6gd.xlarge),从而使用数据分层功能。选择该节点类型将会自动启用数据分层功能。
有关创建集群的更多信息,请参阅步骤 2:创建集群。
使用创建集群时 AWS CLI,您可以通过从 r6gd 系列中选择节点类型(例如 db.r6g d. xlarge)并设置参数来使用数据分层。--data-tiering
选择 r6gd 系列的节点类型时,您将不能选择停止使用数据分层功能。如果您设置 --no-data-tiering
参数,操作将会失败。
对于 Linux、macOS 或 Unix:
aws memorydb create-cluster \ --cluster-name my-cluster \ --node-type db.r6gd.xlarge \ --engine valkey \ --acl-name my-acl \ --subnet-group my-sg \ --data-tiering
对于 Windows:
aws memorydb create-cluster ^ --cluster-name my-cluster ^ --node-type db.r6gd.xlarge ^ --engine valkey ^ --acl-name my-acl ^ --subnet-group my-sg --data-tiering
运行此操作后,您将会看到一条与以下类似的响应:
{ "Cluster": { "Name": "my-cluster", "Status": "creating", "NumberOfShards": 1, "AvailabilityMode": "MultiAZ", "ClusterEndpoint": { "Port": 6379 }, "NodeType": "db.r6gd.xlarge", "EngineVersion": "7.2", "EnginePatchVersion": "7.2.6", "Engine": "valkey" "ParameterGroupName": "default.memorydb-valkey7", "ParameterGroupStatus": "in-sync", "SubnetGroupName": "my-sg", "TLSEnabled": true, "ARN": "arn:aws:memorydb:us-east-1:xxxxxxxxxxxxxx:cluster/my-cluster", "SnapshotRetentionLimit": 0, "MaintenanceWindow": "wed:03:00-wed:04:00", "SnapshotWindow": "04:30-05:30", "ACLName": "my-acl", "DataTiering":"true", "AutoMinorVersionUpgrade": true } }
将数据从快照还原到启用数据分层的集群
您可以使用(控制台)、() 或 (Memory API DB) 将快照还原到启用了数据分层的新集群。AWS CLI当您使用 r6gd 系列的节点类型创建集群时,系统会启用数据分层。
将数据从快照还原到启用数据分层的集群(控制台)
要将快照还原到启用数据分层的新集群(控制台),请按照 从快照还原(控制台) 中的步骤操作
请注意,如要启用数据分层,需要选择 r6gd 系列的节点类型。
使用创建集群时,默认情况下 AWS CLI,通过从 r6gd 系列中选择节点类型(例如 db.r6g d. xlarge)并设置参数来使用数据分层。--data-tiering
选择 r6gd 系列的节点类型时,您将不能选择停止使用数据分层功能。如果您设置 --no-data-tiering
参数,操作将会失败。
对于 Linux、macOS 或 Unix:
aws memorydb create-cluster \ --cluster-name my-cluster \ --node-type db.r6gd.xlarge \ --engine valkey --acl-name my-acl \ --subnet-group my-sg \ --data-tiering \ --snapshot-name
my-snapshot
对于 Windows:
aws memorydb create-cluster ^ --cluster-name my-cluster ^ --node-type db.r6gd.xlarge ^ --engine valkey ^ --acl-name my-acl ^ --subnet-group my-sg ^ --data-tiering ^ --snapshot-name
my-snapshot
运行此操作后,您将会看到一条与以下类似的响应:
{ "Cluster": { "Name": "my-cluster", "Status": "creating", "NumberOfShards": 1, "AvailabilityMode": "MultiAZ", "ClusterEndpoint": { "Port": 6379 }, "NodeType": "db.r6gd.xlarge", "EngineVersion": "7.2", "EnginePatchVersion": "7.2.6", "Engine": "valkey" "ParameterGroupName": "default.memorydb-valkey7", "ParameterGroupStatus": "in-sync", "SubnetGroupName": "my-sg", "TLSEnabled": true, "ARN": "arn:aws:memorydb:us-east-1:xxxxxxxxxxxxxx:cluster/my-cluster", "SnapshotRetentionLimit": 0, "MaintenanceWindow": "wed:03:00-wed:04:00", "SnapshotWindow": "04:30-05:30", "ACLName": "my-acl", "DataTiering": "true" }