

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

# 資料分層
<a name="data-tiering"></a>

從 r6gd 系列使用節點類型的叢集，其資料會在記憶體和本機 SSD （固態硬碟） 儲存體之間分層。資料分層除了將資料存放在記憶體之外，還在每個叢集節點中使用低成本固態硬碟 (SSDs)，為 Valkey 和 Redis OSS 工作負載提供了新的價格效能選項。與其他節點類型類似，寫入 r6gd 節點的資料會長期存放在多可用區域交易日誌中。資料分層非常適合定期存取高達 20% 的整體資料集的工作負載，以及在存取 SSD 資料時可容忍額外延遲的應用程式。

在具有資料分層的叢集上，MemoryDB 會監控其存放的每個項目的上次存取時間。當可用記憶體 (DRAM) 用盡時，MemoryDB 會使用最近最少使用的 (LRU) 演算法，自動將不常存取的項目從記憶體移至 SSD。之後存取 SSD 上的資料時，MemoryDB 會自動並以非同步方式將其移回記憶體，再處理請求。如果您的工作負載只會定期存取其資料的子集，則資料分層是以符合成本效益的方式擴展容量的最佳方式。

請注意，使用資料分層時，金鑰本身一律會保留在記憶體中，而 LRU 則會控制記憶體與磁碟上值的位置。一般而言，建議在使用資料分層時，金鑰大小小於您值的大小。

資料分層專為盡量降低對應用程式工作負載的效能影響所設計。例如，假設 500 位元組字串值，與記憶體中資料的讀取請求相比，對於存放在 SSD 上的資料的讀取請求，您通常會預期額外的 450 微秒延遲。

使用最大的資料分層節點大小 (db.r6gd.8xlarge)，您可以在單一 500 個節點叢集中存放最多約 500 TBs （使用 1 個僅供讀取複本時為 250 TB)。對於資料分層，MemoryDB 保留每個節點 19% 的 (DRAM) 記憶體供非資料使用。資料分層與 MemoryDB 中支援的所有 Valkey 和 Redis OSS 命令和資料結構相容。不需要任何用戶端變更就能使用此功能。

**Topics**
+ [最佳實務](data-tiering-best-practices.md)
+ [資料分層限制](data-tiering-prerequisites.md)
+ [資料層分定價](data-tiering-pricing.md)
+ [資料分層監控](data-tiering-monitoring.md)
+ [使用資料分層](data-tiering-enabling.md)
+ [從快照將資料還原至叢集](data-tiering-enabling-snapshots.md)

# 最佳實務
<a name="data-tiering-best-practices"></a>

建議遵循下列最佳實務：
+ 資料分層非常適合定期存取高達 20% 的整體資料集的工作負載，以及在存取 SSD 資料時可容忍額外延遲的應用程式。
+ 使用資料分層節點上可用的 SSD 容量時，建議值的大小大於金鑰大小。值大小不能大於 128MB，否則不會移至磁碟。項目在 DRAM 和 SSD 之間移動時，金鑰將一律保留在記憶體中，而且只有值會移至 SSD 層。

# 資料分層限制
<a name="data-tiering-prerequisites"></a>

資料分層具有下列限制：
+ 使用的節點類型必須來自 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，否則您無法將 r6gd 叢集的快照還原至另一個叢集。
+ 您無法將快照匯出至 Amazon S3 以進行資料分層叢集。
+ 不支援無叉 (forkless) 儲存。
+ 不支援從資料分層叢集 (例如，使用 r6gd 節點類型的叢集) 擴展到未使用資料分層的叢集 (例如，使用 r6g 節點類型的叢集)。
+ 資料分層僅支援`volatile-lru`、`allkeys-lru` 和 `noeviction` 最大記憶體政策。
+ 大於 128 MiB 的項目不會移至固態硬碟。

# 資料層分定價
<a name="data-tiering-pricing"></a>

R6gd 節點的總容量是 R6g 節點 （記憶體 \$1 SSD) 的 5 倍，且相較於 R6g 節點 （僅限記憶體），可協助您在以最大使用率執行時節省超過 60% 的儲存成本。如需詳細資訊，請參閱 [MemoryDB 定價](https://aws.amazon.com/memorydb/pricing/)。

# 資料分層監控
<a name="data-tiering-monitoring"></a>

MemoryDB 提供專為監控使用資料分層之效能叢集而設計的指標。若要監控 DRAM 中項目與 SSD 的比率，您可以在 使用 `CurrItems` 指標[MemoryDB 的指標](metrics.memorydb.md)。您可以計算百分比為：`(CurrItems with Dimension: Tier = Memory * 100) / (CurrItems with no dimension filter)`。

 如果設定的移出政策允許，當記憶體中的項目百分比低於 5% 時，MemoryDB 會開始移出項目。在設定了移出政策的節點上，寫入操作將收到記憶體不足錯誤。

 當記憶體中的項目百分比低於 5% [擴展 MemoryDB 叢集](scaling-cluster.md)時，仍建議您考慮。如需詳細資訊，請參閱 使用*資料分層的 MemoryDB 叢集指標*[MemoryDB 的指標](metrics.memorydb.md)。

# 使用資料分層
<a name="data-tiering-enabling"></a>

## 使用 使用資料分層 AWS 管理主控台
<a name="data-tiering-enabling-console"></a>

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

如需有關建立叢集的詳細資訊，請參閱 [步驟 2：建立叢集](getting-started.md#getting-started.createcluster)。

## 使用 啟用資料分層 AWS CLI
<a name="data-tiering-enabling-cli"></a>

使用 建立叢集時 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
    }
}
```

# 從快照將資料還原至叢集
<a name="data-tiering-enabling-snapshots"></a>

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

## 將快照中的資料還原至已啟用資料分層的叢集 （主控台）
<a name="data-tiering-enabling-snapshots-console"></a>

若要將快照還原至已啟用資料分層的新叢集 （主控台），請遵循 中的步驟 [從快照還原 （主控台）](snapshots-restoring.md#snapshots-restoring-CON)

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

## 將快照中的資料還原至已啟用資料分層的叢集 (AWS CLI)
<a name="data-tiering-enabling-snapshots-cli"></a>

使用 建立叢集時 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"
}
```