はじめに
フロントエンドの学習にあたり最近AWS Amplifyを利用し始めました。おそらく昨今のフロントエンドエンジニアはAWSの各種サービスの理解も避けては通れないということでAWS DynamoDBについて調べてみました。(2021年5月現在)
AWS DynamoDB
AWS DynamoDBは、Key-Value型と呼ばれるデータベース構造を持つNoSQLデータベースを提供してくれるサービスになります。
Key-Value型データベースとは、キーと値(Value)のペアでデータを格納してく方式で、DynamoDBもMongoDBなどと同じようにNoSQL(非リレーショナル)データベースと呼ばれています。一般的なリレーショナルデータベースでは、レコードは正規化されて役割ごとに別々のテーブルに格納され(例えば商品テーブル、メーカーテーブル、カテゴリーテーブルなど)、プライマリーキー、外部キーと紐付けて管理すといった設計になっています。一方NoSQLデータベースでは、乱暴な言い方をすると全部をひとつのレコード必要な項目は全部まとめてしまい(例えば1つの商品レコードにメーカー名もカテゴリー名も記載する)、ひとつの大きなJSONドキュメントととして扱われることが多いようです。
構造上リレーショナルデータベースでは最初に決めた形のデータのみが格納できるため、データの高い整合性を担保することが可能です。逆にNoSQLデータベースでは、形式に決まりはないためレコードによって異なる内容を登録することが可能なため、高い柔軟性を持つことが可能です。
それぞれにメリット・デメリットはありますが、AWS DynamoDBはNoSQLデータベースの利点に、AWS独自の特長を持たせた拡張の高いデータベースサービスを提供してくれています。
DynamoDBをフロントエンドから利用の場合は、AWS Amplifyサービスを利用すると簡単に連携させることが可能です。AWS AppSyncと呼ばれるGraphQLを利用したAPIの開発を用意にするサービスを使うことでAWS DynamoDBとGraphQLのスキーマ設計からCRUDインターフェースまでを作成、提供してくれます。
AWS DynamoDBにはデータ項目を一意にするために「プライマリキー(DynamoDBではパーティションキーと呼ばれる)」でデータを特定することになりますが、別途ソートキー(パーティションキー+ソートキー)を組み合わせることでもプライマリキーとして利用することが可能です。他にセカンダリインデックスと呼ばれるインデックスを作成することも可能で検索要件によっても柔軟に切り替えることができるようです。
Amplify管理下ではスキーマに@searchable
を追記するだけでElasticSearchとの連携が可能になるといういたれりつくせりの仕様です。
関連記事
参考サイト