本文へスキップ
BecomeCoder

C#実践コース · 第9章 AWS SDK for .NET · レッスン53

Amazon DynamoDB ― NoSQLデータ操作

ローカル実施

導入

Amazon DynamoDBは、AWSのフルマネージドなNoSQLデータベースです。リレーショナルDB(EF Core)と違い、キーで高速に読み書きでき、スケールしやすいのが特徴。C#のオブジェクトをそのまま保存できる仕組み(オブジェクト永続化モデル)を使います。

図解

flowchart LR
    OBJ["C♯オブジェクト<br/>User { Id, Name }"] -->|SaveAsync| DB[("DynamoDB テーブル<br/>パーティションキー: Id")]
    DB -->|LoadAsync(キーで取得)| OBJ
    style DB fill:#fff3e0

サンプル(読み物)

using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;

// テーブルに対応するクラス(属性でマッピング)
[DynamoDBTable("Users")]
public class User
{
    [DynamoDBHashKey]           // パーティションキー(主キー)
    public string Id { get; set; } = "";
    public string Name { get; set; } = "";
    public int Age { get; set; }
}

var client = new AmazonDynamoDBClient(Amazon.RegionEndpoint.APNortheast1);
var context = new DynamoDBContext(client);

// 保存(Create/Update)
await context.SaveAsync(new User { Id = "u1", Name = "Taro", Age = 20 });

// キーで取得(Read)
var user = await context.LoadAsync<User>("u1");
Console.WriteLine($"{user.Name}{user.Age}歳)");   // Taro(20歳)

// 削除(Delete)
await context.DeleteAsync<User>("u1");
  • [DynamoDBTable]/[DynamoDBHashKey]属性でC#クラスとテーブルを対応づける(record・EF Coreに似た発想)
  • DynamoDBContextSaveAsync/LoadAsync/DeleteAsyncCRUDができる
  • パーティションキー主キー)での取得が高速。RDBのような複雑なJOINは苦手
  • 「キーで引く用途」に強く、EF Core(RDB)とは使い分ける

詳細手順

  1. DynamoDBコンソールでUsersテーブルを作成する(パーティションキーId
DynamoDBコンソールでUsersテーブルをパーティションキーIdで作成する画面
DynamoDBテーブルの作成(パーティションキー Id)
  1. スターター145-aws-dynamodb/starter.zipを開き、F5でSave→Load→Deleteを実行する
  2. コンソールの「項目を探索」でデータの増減を確認する

まとめ

  • DynamoDBはAWSのフルマネージドNoSQL DB
  • 属性マッピング+DynamoDBContextでC#オブジェクトをCRUD
  • キー引きに強い。RDB(EF Core)と使い分ける

次回: 処理を非同期につなぐメッセージキューAmazon SQSです。

テンプレート構成(教材制作用メモ)

145-aws-dynamodb/
└── starter.zip   # AWSSDK.DynamoDBv2導入済み / CRUD TODO / README