amazon dynamodb deep dive: advanced design patterns - aws

55
© 2020, Amazon Web Services, Inc. or its Affiliates. Amazon DynamoDB deep dive: Advanced design patterns

Upload: others

Post on 29-Dec-2021

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Amazon DynamoDB deep dive: Advanced design patterns

Page 2: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

自己紹介

成田 俊 id:oranie

経歴

• 前職のWeb系会社でインフラエンジニアを担当、主にMySQLやCassandra運用などに携わる

AWSJでの担当

• NoSQLサービス、DynamoDBをメインに技術支援を担当

Page 3: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Agenda

• Overview of Amazon DynamoDB

• Scaling NoSQL

• NoSQL data modeling

• 正規化と非正規化

• デザインパターン

• 複合key, 階層的構造のデータ, リレーショナルなデータの表現

• 実際のアプリケーションにおけるモデリング

Page 4: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Performance at scale

あらゆる規模で一貫した1桁ミリ秒の応答時間。事実上無制限のスループットでアプリ

ケーションを構築

Serverless architecture

ハードウェアのプロビジョニング、ソフトウェアのパッチ適用、アップグレードなし、自動スケールアップまたはスケールダウン、データの継続的なバック

アップ

Global replication

複数の AWS リージョン間で簡単にテーブルをレプリケートすることで、ローカルデータにすばやくアクセスできるグローバルアプリケーションを構築可能

Enterprise security

すべてのデータを暗号化AWS IAMとの完全統合により、堅牢なセキュリティを

実現

Amazon DynamoDBあらゆる規模に対応する高速で柔軟なkey-value データベースサービス

Page 5: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Page 6: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

メンテナンスフリー

もしこれらを管理するコストが無ければ他に何が出来るか?

セキュリティ

OSパッチ適用DBパッチ適用アクセスコントロール

監査

暗号化

コンプライアンス対応

耐久性

サーバ, ラック, データセンタ維持HW障害に伴うデータコピーバックアップ・リストア

可用性

高可用性を実現する設計

モニタリング

クロスリージョンレプリケーション性能

パフォーマンスチューニング

インデックス設計、作成

In-memory上でキャッシュ維持拡張性

キャパシティプランニング

ホスト構築、投入作業

障害ホストの修復、撤去作業

Page 7: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

TableTable

Items

Attributes

Partitionkey

Sort key

必須Key-value アクセスパターンを実現 データの分布を決定

オプション1:Nの関係性を表現豊富なクエリでの条件指定が可能

All items for key==, <, >, >=, <=“begins with”“between”“contains”“in”sorted resultscountstop/bottom N values

GSI1PK

GSI1PK

GSI1PK

GSI2PK

GSI2PK

GSI3PK

Page 8: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Partition overloading -> 一つのPKに複数の定義を紐付ける

同一PKだが、SKで複数のコンテキストを分割するため、色んな値を入れられる様に汎用的なkey名を使用

SELECT * WHERE PK=Customer_1 AND SK > 2019-10-29

Page 9: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Secondary indexes

PK/SKだけではない二次的なアクセスパターンもサポートTableのPartition keyを横断して探索可能複合

A1(partition) A2 A3 A4 A5

A5(partition)

A4(sort)

A1(item key)

A3(projected)

INCLUDE A3

A4(partition)

A5(sort)

A1(item key)

A2(projected)

A3(projected)

ALL

A2(partition)

A1(itemkey)

KEYS_ONLY

Indexes

Table RCU/WCUは元のテーブルとは独立して管理

Online indexing

Page 10: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

00 55 A954 FFAA00 FF

Partition/shard keys in NoSQLPartition/shard key は順不同なハッシュインデックスを生成するのに利用テーブルをスケールさせるため内部ではパーティションで分割

Id = 1Name = Jim

Hash (1) = 7B

Id = 2Name = AndyDept = Eng

Hash (2) = 48

Id = 3Name = KimDept = Ops

Hash (3) = CD

Key space

Page 11: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Partition、Scaleの仕組みについて

https://www.slideshare.net/AmazonWebServices/amazon-dynamodb-under-the-hood-how-we-built-a-hyperscale-database-dat321-aws-reinvent-2018

Page 12: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Write sharding GSI上の高密度集約をサポートするためのソルトインデックス付きキー

Page 13: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Index overloading

複数のアクセスパターンに対応したインデックスを使用するために、汎用的な名前のAttributeを使用する

Page 14: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Index overloadingSELECT * WHERE PK=ONLINE#0 AND SK=US…SELECT * WHERE PK=ONLINE#N AND SK=US

SELECT * WHERE PK=B07G6CQQYG#0 AND SK=PROCESSING…SELECT * WHERE PK=B07G6CQQYG#N AND SK=PROCESSING

Page 15: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates. © 2020, Amazon Web Services, Inc. or its Affiliates.

Scaling NoSQL“We are stuck with technology when what we really want is just stuff that works.”

Page 16: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

What bad NoSQL looks like

Part

itio

n

Time

Heat

Page 17: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Getting the most out of DynamoDB throughput

I/O リクエストを均等に分散しないパーティションキー設計では、「ホット」パーティションが作成される場合があります。これにより、スロットリングが発生した

り、プロビジョニングされた I/O キャパシティーを効率的に使用されないことがあります—DynamoDB Developer Guide

Space: Access is evenly spread over the key space 空間内に均等にアクセスが来るように

Time: Requests arrive evenly spaced in time 等間隔なアクセスが望ましい

Page 18: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Much better picture

Page 19: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates. © 2020, Amazon Web Services, Inc. or its Affiliates.

PK分散の補足

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-partition-key-design.html

パーティションキーの値 均一性

ユーザー ID(アプリケーションに多くのユーザーがある場合) 良い

ステータスコード(可能性のあるステータスコードが少しだけある場合)

不良

項目の作成日。直近の期間 (日、時、分) に切り上げられます。 不良

デバイス ID(各デバイスが比較的類似した間隔でデータにアクセスする場合).

良い

デバイス ID (追跡中のデバイスが多数あり、そのうちの 1 つのデバイスが他のすべてのデバイスよりもずっと人気がある場合)

不良

Page 20: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Auto scaling

Throughput automatically adapts to your actual traffic

With auto scalingWithout auto scaling

Page 21: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Millisecond レベルの一貫したレイテンシ

Consistent low latency

1テーブルあたり何百万/秒ものリクエスト

High request volume

Performance at any scale

Page 22: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Wri

te c

apac

ity

unit

s/se

c

Super Bowl

Global-scale events: Elastic is the new normal

Peak Consumed Capacity

Provisioned Capacity

Page 23: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates. © 2020, Amazon Web Services, Inc. or its Affiliates.

NoSQL data modeling“データがあるならデータを見よう意見しかないなら、私の意見で”

Page 24: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

SQL vs. NoSQL design pattern

Page 25: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Ad hoc “joins” in SQL

SELECT * FROM PRODUCTS INNER JOIN BOOKS ON productId = productIdWHERE name = “Book Title”

SELECT * FROM PRODUCTS INNER JOIN ALBUMS ON productId = productIdINNER JOIN TRACKS ON albumId = albumIdWHERE name = “Album Title”

SELECT * FROM PRODUCTS INNER JOIN VIDEOS ON productId = productIdINNER JOIN ACTORVIDEO ON videoId = videoIdINNER JOIN ACTORS ON actorId = actorIdWHERE name = “Movie Title”

Page 26: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Modeled “joins” in NoSQL

SELECT * WHERE PK=“Book Title”

SELECT * WHERE PK=“Album Title”

SELECT * WHERE PK=“Movie Title”

Page 27: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Modeled “joins” in NoSQL

SELECT * WHERE SK=“Author Name”

SELECT * WHERE SK=“Song Title”

SELECT * WHERE SK=“Actor Name”

SELECT * WHERE SK=“Director Name”

SELECT * WHERE SK=“Musician”

Swap PK and SK on index

Page 28: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates. © 2020, Amazon Web Services, Inc. or its Affiliates.

複雑なクエリをどう実現するか“Computers are useless. They can only give you answers.”

Page 29: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates. © 2020, Amazon Web Services, Inc. or its Affiliates.

DynamoDBにとって複雑なクエリとは

例えば

• ある単語を元に含まれるItemを検索するような全文検索• 全てのItemを元に様々な集計処理を行いレポートを作成• 複数のtableなど

現在これらの機能は組み込まれていないため、もしDynamoDBだけで実現するならApp側で多くの実装が必要となるケースがある

Page 30: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Serverless & event driven architecture

AWS Lambda変更通知

リアルタイム

集計結果の保存 Amazon ES

Kinesis Firehose

データ書き込みイベント

S3(Parquet)

AmazonAthena

DynamoDB streams

Page 31: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates. © 2020, Amazon Web Services, Inc. or its Affiliates.

複合key(Composite keys)“Hierarchies are celestial. In hell all are equal.”

Page 32: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Secondary index

Opponent Date GameId Status Host

Alice 2014-10-02 d9bl3 DONE David

Carol 2014-10-08 o2pnb IN_PROGRESS Bob

Bob 2014-09-30 72f49 PENDING Alice

Bob 2014-10-03 b932s PENDING Carol

Bob 2014-10-03 ef9ca IN_PROGRESS David

BobPartition key Sort key

複数の値をソート・フィルタ

Page 33: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Secondary index

Approach 1: Query filter

Bob

Opponent Date GameId Status Host

Alice 2014-10-02 d9bl3 DONE David

Carol 2014-10-08 o2pnb IN_PROGRESS Bob

Bob 2014-09-30 72f49 PENDING Alice

Bob 2014-10-03 b932s PENDING Carol

Bob 2014-10-03 ef9ca IN_PROGRESS David

SELECT * FROM GameWHERE Opponent='Bob' ORDER BY Date DESCFILTER ON Status='PENDING'

(Filtered out)

Page 34: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Approach 2: 複合key(Composite key)

StatusDate

DONE_2014-10-02

IN_PROGRESS_2014-10-08

IN_PROGRESS_2014-10-03

PENDING_2014-09-30

PENDING_2014-10-03

Status

DONE

IN_PROGRESS

IN_PROGRESS

PENDING

PENDING

Date

2014-10-02

2014-10-08

2014-10-03

2014-10-03

2014-09-30

+ =

Page 35: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Secondary index

Approach 2: 複合key(Composite key)

Opponent StatusDate GameId Host

Alice DONE_2014-10-02 d9bl3 David

Carol IN_PROGRESS_2014-10-08 o2pnb Bob

Bob IN_PROGRESS_2014-10-03 ef9ca David

Bob PENDING_2014-09-30 72f49 Alice

Bob PENDING_2014-10-03 b932s Carol

Partition key Sort key

Page 36: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Opponent StatusDate GameId Host

Alice DONE_2014-10-02 d9bl3 David

Carol IN_PROGRESS_2014-10-08 o2pnb Bob

Bob IN_PROGRESS_2014-10-03 ef9ca David

Bob PENDING_2014-09-30 72f49 Alice

Bob PENDING_2014-10-03 b932s Carol

Secondary index

Approach 2: 複合key(Composite key)

Bob

SELECT * FROM GameWHERE Opponent='Bob'

AND StatusDate BEGINS_WITH 'PENDING'

Page 37: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates. © 2020, Amazon Web Services, Inc. or its Affiliates.

Modeling relational data“Dude, where’s my lookup table?”

Page 38: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

複数のリレーショナルを必要とするモデリング

Page 39: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

The table

Page 40: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

The table

Page 41: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

The index schema (GSI1)

Page 42: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

The index schema (GSI2)

Page 43: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

The index schema (GSI3)

Page 44: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

各処理と探索条件まとめ

Page 45: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates. © 2020, Amazon Web Services, Inc. or its Affiliates.

Item分割“To understand is to perceive patterns.”

Page 46: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

アクセスパターンによる問題

• 保険見積もりサービス

• すべてのバージョンを保存

• 1つの見積もりにつき200以上の属性

• 平均Itemサイズ50KB

• ピーク時800/分レベルのアクセス

• 1000 WCUが必要だった

Page 47: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Optimized for writes

• カテゴリが更新されたときのバージョン項目

• 照会されたときにすべてのバージョンを送信

• クライアント側ロジックによる処理

• 50 WCU で済むように改善

Page 48: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

NoSQL Workbench for DynamoDB

• AWSスペシャリストSAチームが設計したツールを使用する

• データのモデル化、デザインの可視化、コードの生成

• https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/workbench.html

Page 49: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

まとめ

• NoSQLは非リレーショナルを意味しない

• ER図での整理、アプリケーション機能条件の整理はNoSQLでも重要

• RDBMS/DWHなどとの併用はNGではない

• OLAPにRDBMS/DWHを使用する

• OLTPなワークロードにはNoSQLを使用しスケールを実現

Page 50: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Page 51: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates. © 2019, Amazon Web Services, Inc. or its affiliates. All rights reserved.

25+ free digital training courses cover topics and services related to databases, including:

Validate expertise with the new AWS Certified Database

Learn databases with AWS Training and Certification

• Amazon Aurora • Amazon Neptune• Amazon DocumentDB• Amazon DynamoDB

• Amazon ElastiCache• Amazon Redshift• Amazon RDS

Visit aws.training

Resources created by the experts at AWS to help you build and validate database skills

Page 52: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Major languages supported through the AWS SDK, such as Java, .NET, Python, Node.js, and Go

Use AWS Database Migration Service to migrate your data to DynamoDB

Get started today

See DynamoDB.com

Follow @DynamoDBon

Page 53: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Appendix

DynamoDBの過去セッション

Amazon Blackbelt webinar

https://aws.amazon.com/jp/blogs/news/webinar-bb-dynamodb-advanced-design-pattern-2018/

Amazon DynamoDB Deep Dive | AWS Summit Tokyo 2019

https://www.youtube.com/watch?v=16RYHfe89WY

Re:Invent 2019 session DynamoDB セッション紹介ブログ

https://aws.amazon.com/jp/blogs/news/amazon-dynamodb-related-videos-and-slide-decks-from-aws-reinvent-2019/

Page 54: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Appendix

aws.training以外のオンライントレーニングLinux Academy

Amazon DynamoDB Deep Dive

https://linuxacademy.com/course/amazon-dynamo-db-deep-dive/

Amazon DynamoDB Data Modeling

https://linuxacademy.com/course/amazon-dynamo-db-data-modeling/

他にもDynamoDBを利用したAppなどのトレーニングあり

Page 55: Amazon DynamoDB deep dive: Advanced design patterns - AWS

© 2020, Amazon Web Services, Inc. or its Affiliates.

Appendix

AWS sample repository

https://github.com/aws-samples

2019 DevDayで公開したサンプル

https://github.com/aws-samples/amazon-dynamodb-chat-sample

他にも様々なユースケースや言語のサンプルがあるのでまずは動くもので勉強したいなどには最適