資料分層 - Amazon MemoryDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

資料分層

使用 r6gd 系列節點類型的叢集,其資料會在記憶體和本機 SSD(固態硬碟) 儲存之間分層。資料分層除了將資料儲存在記憶體之外,還在每個叢集節點中使用低成本的固態硬碟 (SSDs),為 Valkey 和 Redis OSS工作負載提供新的價格效能選項。與其他節點類型類似,寫入 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-2us-east-1us-west-2us-west-1eu-west-1eu-west-3eu-central-1ap-northeast-1ap-southeast-1ap-southeast-2ap-south-1ca-central-1sa-east-1

  • 除非 r6gd 也使用 r6gd,否則您無法將 r6gd 叢集的快照還原至另一個叢集。

  • 您無法將快照匯出至 Amazon S3 以進行資料分層叢集。

  • 不支援無叉 (forkless) 儲存。

  • 不支援從資料分層叢集 (例如,使用 r6gd 節點類型的叢集) 擴展到未使用資料分層的叢集 (例如,使用 r6g 節點類型的叢集)。

  • 資料分層僅支援volatile-lruallkeys-lrunoeviction 最大記憶體政策。

  • 大於 128 MiB 的項目不會移至 SSD。

資料層分定價

R6gd 節點的總容量是 R6g 節點的 5 倍 (記憶體 + SSD),且相較於 R6g 節點 (僅限記憶體),可協助您在以最大使用率執行時節省超過 60% 的儲存成本。如需詳細資訊,請參閱 MemoryDB 定價

監控

MemoryDB 提供專門設計來監控使用資料分層之效能叢集的指標。若要監控 中項目DRAM相較於 的比率SSD,您可以在 使用 CurrItems 指標MemoryDB 的指標。您可以計算百分比為:(CurrItems with Dimension: Tier = Memory * 100) / (CurrItems with no dimension filter)。當記憶體中的項目百分比低於 5% 時,建議您考慮 擴展 MemoryDB 叢集

如需詳細資訊,請參閱位於 的 MemoryDB 叢集使用資料分層的指標MemoryDB 的指標

使用資料分層

建立叢集時,您可以從 r6gd 系列中選取節點類型,例如 db.r6gd.xlarge ,以使用資料分層。選取該節點類型會自動啟用資料分層。

如需有關建立叢集的詳細資訊,請參閱 步驟 2:建立叢集

使用 建立叢集時 AWS CLI,您可以從 r6gd 系列中選取節點類型,例如 db.r6gd.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 } }

將快照中的資料還原至啟用資料分層的叢集

您可以使用 (主控台)、 (AWS CLI) 或 (MemoryDB ) 將快照還原至啟用資料分層的新叢集API。當使用 r6gd 系列中的節點類型建立叢集時,會啟用資料分層。

將快照中的資料還原至已啟用資料分層的叢集 (主控台)

若要將快照還原至啟用資料分層的新叢集 (主控台),請依照 中的步驟執行 從快照還原 (主控台)

請注意,若要啟用資料分層,您需要從 r6gd 系列中選取節點類型。

使用 建立叢集時 AWS CLI,預設會使用資料分層,方法是從 r6gd 系列中選取節點類型,例如 db.r6gd.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" }