データ階層化 - Amazon MemoryDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

データ階層化

r6gd ファミリーのノードタイプを使用するクラスターでは、データがメモリとローカル SSD (ソリッドステートドライブ) ストレージの間で階層化されます。データ階層化は、データをメモリに保存することに加えて、各クラスターノードで低コストのソリッドステートドライブ (SSDsワークロードに新しい価格パフォーマンスオプションを提供します。他のノードタイプと同様に、r6gd ノードに書き込まれたデータは、マルチ AZ トランザクションログに永続的に保存されます。データ階層化は、データセット全体の最大 20% に定期的にアクセスするワークロードや、SSD 上のデータにアクセスする際に増加するレイテンシーを許容できるアプリケーションに最適です。

データ階層化を行うクラスターでは、MemoryDB は保存するすべての項目の最終アクセス時間をモニタリングします。使用可能なメモリ (DRAM) が完全に消費されると、MemoryDB は Least Recently Used (LRU) アルゴリズムを使用して、アクセス頻度の低い項目をメモリから SSD に自動的に移動します。その後、SSD 上のデータにアクセスすると、MemoryDB はリクエストを処理する前に自動的かつ非同期的にデータをメモリに戻します。データのサブセットにのみ定期的にアクセスするワークロードがある場合、データ階層化は容量を優れたコスト効率でスケールするための最適な方法となります。

データ階層化を使用する場合、キー自体は常にメモリに残り、LRU によってメモリとディスクの値の配置が制御されます。一般に、データ階層化を使用する際は、キーサイズを値のサイズよりも小さくすることをお勧めします。

データ階層化は、アプリケーションワークロードへのパフォーマンスの影響を最小限に抑えるように設計されています。例えば、500 バイトの文字列値を想定した場合に、メモリ内のデータに対する読み取りリクエストと比較すると、SSD に保存されたデータに対する読み取りリクエストには、通常、平均で 450 マイクロ秒のレイテンシーが生じることが予想されます。

最も大きいデータ階層化ノードサイズ (db.r6gd.8xlarge) では、単一の 500 ノードクラスターに最大 500 TB まで保存できます (1 つのリードレプリカを使用する場合は 250 TB)。データ階層化では、MemoryDB はノードあたり (DRAM) メモリの 19% をデータ以外の用途用に確保しています。データ階層化は、MemoryDB でサポートされているすべての Redis OSS コマンドとデータ構造と互換性があります。この機能を使用するためのクライアント側の変更は必要ありません。

ベストプラクティス

推奨されるベストプラクティスを以下に示します:

  • データ階層化は、データセット全体の最大 20% に定期的にアクセスするワークロードや、SSD 上のデータにアクセスする際に増加するレイテンシーを許容できるアプリケーションに最適です。

  • データ階層化ノードで利用可能な SSD 容量を使用する場合は、値のサイズをキーサイズよりも大きくすることをお勧めします。値のサイズは 128 MB を超えることはできません。128 MB を超えると、ディスクに移動されません。DRAM と SSD の間で項目を移動すると、キーは常にメモリに残り、値だけが SSD 階層に移動されます。

制限事項

データ階層化には以下の制限があります。

  • 使用するノードタイプは、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 にエクスポートすることはできません。

  • 分岐なしの保存はサポートされていません。

  • データ階層化クラスター (r6gd ノードタイプを使用するクラスターなど) からデータ階層化を使用しないクラスター (r6g ノードタイプを使用するクラスターなど) へのスケーリングはサポートされていません。

  • データ階層化では、volatile-lruallkeys-lru および noeviction の maxmemory ポリシーのみがサポートされます。

  • 128 MiB を超える項目は SSD に移動されません。

データ階層化の料金

R6g ノード (メモリのみ) と比較すると、R6gd ノードは総容量 (メモリ + SSD) が 5 倍あり、最大使用率で実行すると 60 % 以上のコスト削減を実現できます。詳細については、「MemoryDB の料金‬」を参照してください。‬‬‬‬‬‬

モニタリング

MemoryDB は、データ階層化を使用するクラスターのパフォーマンスをモニタリングするために特別に設計されたメトリクスを提供します。SSD と比較した DRAM 内の項目の比率をモニタリングするには、MemoryDB のメトリック で ‭CurrItems メトリクスを使用できます。パーセンテージは (CurrItems with Dimension: Tier = Memory * 100) / (CurrItems with no dimension filter) のように計算できます。メモリ内の項目のパーセンテージが 5% を下回った場合は、MemoryDB クラスターのスケーリング を検討することをお勧めします。

詳細については、MemoryDB のメトリック の データ階層化を使用する MemoryDB クラスターのメトリクスを参照してください。

データ階層化の使用

クラスターを作成する場合は、r6gd ファミリーから ‭db.r6gd.xlarge‭ などのノードタイプを選択し、データ階層化を使用します。‬‬‬‬‬‬ ノードタイプを選択すると、データ階層化が自動的に有効になります。

クラスター作成の詳細については、ステップ 1: クラスターを作成する を参照してください。

を使用してクラスターを作成する場合 AWS CLI、db.r6gd.xlarge などの r6gd ファミリーからノードタイプを選択し、 --data-tieringパラメータを設定して、データ階層化を使用します。

r6gd ファミリーからノードタイプを選択する際に、データ階層化をオプトアウトすることはできません。--no-data-tiering パラメータを設定すると、オペレーションは失敗します。

Linux、macOS、Unix の場合:

aws memorydb create-cluster \ --cluster-name my-cluster \ --node-type db.r6gd.xlarge \ --acl-name my-acl \ --subnet-group my-sg \ --data-tiering

Windows の場合:

aws memorydb create-cluster ^ --cluster-name my-cluster ^ --node-type db.r6gd.xlarge ^ --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": "6.2", "EnginePatchVersion": "6.2.6", "ParameterGroupName": "default.memorydb-redis6", "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、データ階層化はデフォルトで db.r6gd.xlarge などの r6gd ファミリーからノードタイプを選択し、 --data-tieringパラメータを設定することによって使用されます。

r6gd ファミリーからノードタイプを選択する際に、データ階層化をオプトアウトすることはできません。--no-data-tiering パラメータを設定すると、オペレーションは失敗します。

Linux、macOS、Unix の場合:

aws memorydb create-cluster \ --cluster-name my-cluster \ --node-type db.r6gd.xlarge \ --acl-name my-acl \ --subnet-group my-sg \ --data-tiering \ --snapshot-name my-snapshot

Linux、macOS、Unix の場合:

aws memorydb create-cluster ^ --cluster-name my-cluster ^ --node-type db.r6gd.xlarge ^ --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": "6.2", "EnginePatchVersion": "6.2.6", "ParameterGroupName": "default.memorydb-redis6", "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" }