Amazon DynamoDBの紹介と東急ハンズでの活用について

Preview:

Citation preview

Copyright © 2014. All rights reserved.

2015年2月7日

JAWS-UG KANSAI特別編

ハンズラボ株式会社井上泰治

DynamoDBの紹介と東急ハンズでの活用について

1

自己紹介

井上 泰治

ハンズラボ株式会社

主に、EC系(ハンズネット等)担当

日本酒とビールが好き。

2

もくじ

1. Amazon DynamoDBの紹介

2. 東急ハンズでの活用について

3. おまけ(DynamoDB最新情報)

3

1. Amazon DynamoDBの紹介

Amazon DynamoDBの特徴

1. AWS完全マネージドのデータストア2. スケーラビリティ3. 高信頼性4. 柔軟な料金体系5. データ・モデル

4

1. Amazon DynamoDBの紹介

- 構築不要- 自分でインストールする必要がない

- 運用不要- 落ちないように中の人が頑張ってくれる

- 万が一何かあったらAWSのせいにできる

エンジニアの精神衛生の向上!!

特徴1: AWS完全マネージドのデータストア

5

1. Amazon DynamoDBの紹介

- 必要に応じて自動的にスケールアウト- 必要性=データ容量 or スループット

特徴2: スケーラビリティ

レプリケーションやシャーディングなどを考慮する必要がない。▶ データ量、アクセス数が増えても、アプリケーションに手を入れなくて済む

Read Capacity

2,000

Read Capacity

10,000 :

scale

6

1. Amazon DynamoDBの紹介

- 1回の書き込みリクエストで、3ヶ所のAZ

に保存される

特徴3: 高信頼性

Availability Zone

Availability Zone

Availability Zone

instance

Write

7

1. Amazon DynamoDBの紹介

• スループットと容量により決定• 指定したスループットにより時間あたりの料金が決定。

• 容量による課金は、めちゃ安いので考えるのやめた。

• リザーブド(前払い)による割引あり。

特徴4: 柔軟な料金体系

8

1. Amazon DynamoDBの紹介

- スキーマレスKey-Valueストア(インデックス以外)

- 検索はインデックスでのみ可能- インデックスは事前に作成しておく- JSON形式のデータ型もサポート

user_id name age created_at

1 John 20 2015-01-03

2 David 33 2015-01-11

3 Anthony 18 2015-01-18

テーブル

項目(≒レコード)

属性(≒カラム)

特徴5: データ・モデル

GSIが後から作成できるようになりました!

(2015/1/27 発表)

9

1. Amazon DynamoDBの紹介

Amazon DynamoDBのデータ・モデル

1. データ型2. インデックスとクエリ

10

1. Amazon DynamoDBの紹介

• 属性(Attribute)は型を持つ• インデックスは指定した型の値を入れる必要がある• それ以外はレコード毎に型や属性名はバラバラでOK

• 利用できるデータ型は以下のとおり

1. データ型

名称 説明

String 文字列

Number 数値

Binary バイナリ

String Set 文字列の配列

Number Set 数値の配列

Binary Set バイナリの配列

名称 説明

List JSONの配列のような順序付き集合

Map JSONのオブジェクトのようなKey-Value

ペア

Boolean 真偽値

Null NULL値

※ インデックスに使用できるのは String、Number、Binaryのみ

11

1. Amazon DynamoDBの紹介

プライマリインデックス

グローバルセカンダリインデックス(GSI)

ローカルセカンダリインデックス(LSI)

• DynamoDBはインデックスでしか検索ができないため、検索したい項目にはインデックスを作成しておく必要がある。

• スキーマレスといいつつ、インデックスだけはちゃんと考えないとダメ。

• インデックスは、Hash Key と Range Keyという2つの属性の組み合わせで作成する。

• インデックスには下記3種類がある

2. インデックス

12

1. Amazon DynamoDBの紹介

プライマリインデックス

- テーブルに必ず1つ作成するインデックス- Hash Keyのみと、Hash Key + Range Key の2種類から選択- 各インデックスでユニークになる必要がある- データ型は、String / Number / Binary から選択

id name age

1 John 20

2 David 33

3 Anthony 18

user_id friend_id

1 2

1 3

2 1

HK HK RK

テーブル: users (HKの例) テーブル: friends (HK+RKの例)

2. インデックス

13

1. Amazon DynamoDBの紹介

ローカルセカンダリインデックス(LSI)

- プライマリインデックスのHash Key に別のRange

Keyを設定できるようなイメージ- 同じ Hash Key内でのみ検索、ソートが可能

user_id friend_id mute_flag

1 2 1

1 3 0

2 1 1

HK LSI:RK

SELECT * FROM friends

WHERE user_id = 1

AND mute_flag = 0

<Queryイメージ>RK

テーブル: friends

2. インデックス

14

1. Amazon DynamoDBの紹介

グローバルセカンダリインデックス(GSI)

- プライマリインデックスとは別にHash Key , Range

Key を追加できる- Hash Keyをまたいだ検索が可能

user_id name country age

1 John Japan 20

2 David US 33

3 Anthony Australia 18

GSI:RKGSI:HKHK

SELECT * FROM users

WHERE country = ‘US’

AND age >= 20

<Queryイメージ>

テーブル: users

2. インデックス

プライマリのHKとは関係ない

テーブル縦断したクエリが実行できる

15

1. Amazon DynamoDBの紹介

今紹介した、3つのインデックスを活用して、アプリケーションを実装することになります。

DynamoDBはインデックス設計がキモになります。

2. インデックス

16

1. Amazon DynamoDBの紹介

マネージメントコンソールからテーブル作成

DynamoDBの始め方

もちろん、aws cli からもできます。

テーブル名

Primary Key(インデックス)

- Hash Key

- Range Key

スループット- Read Capacity

- Write Capacity

17

1. Amazon DynamoDBの紹介

各言語のSDKがあるので、好きな言語で遊んでみる。

DynamoDBの始め方

Java Python PHP

.NETRuby Node.js など

Gophar君が仲間になりたそうにこっちをみている。

New !

18

1. Amazon DynamoDBの紹介 (1)

ローカルで開発するには、DynamoDB Localを

DynamoDBの始め方

• 無料で使えるDynamoDB疑似環境• Javaが動く環境であれば動く(はず)• JavaScript Shell が同胞されており、ブラウザから試せる

19

1. Amazon DynamoDBの紹介

2. 東急ハンズでの活用について

3. おまけ(DynamoDB最新情報)

20

2. 東急ハンズでの活用方法について

• 毎年8月末にハンズ恒例の大セール「ハンズメッセ」開催。

• ネットストア(ハンズネット)も同時開催• セール開始時(00:00)にお客様が殺到• サーバーが落ちる

• というのを2年くらい経験

Amazon DynamoDB導入の背景

コストを抑えつつ、セールの爆発的なトラフィックにも耐えられる仕組みの構築が急務

21

2. 東急ハンズでの活用方法について

参考: セール時のスパイクアクセス

0.00

50.00

100.00

150.00

200.00

250.00

300.00

350.00

400.00

450.00

500.00

20

14-0

8-2

7 2

3:4

0

20

14-0

8-2

7 2

3:4

4

20

14-0

8-2

7 2

3:4

8

20

14-0

8-2

7 2

3:5

2

20

14-0

8-2

7 2

3:5

6

20

14-0

8-2

8 0

0:0

0

20

14-0

8-2

8 0

0:0

4

20

14-0

8-2

8 0

0:0

8

20

14-0

8-2

8 0

0:1

2

20

14-0

8-2

8 0

0:1

6

20

14-0

8-2

8 0

0:2

0

20

14-0

8-2

8 0

0:2

4

20

14-0

8-2

8 0

0:2

8

20

14-0

8-2

8 0

0:3

2

20

14-0

8-2

8 0

0:3

6

20

14-0

8-2

8 0

0:4

0

20

14-0

8-2

8 0

0:4

4

20

14-0

8-2

8 0

0:4

8

20

14-0

8-2

8 0

0:5

2

20

14-0

8-2

8 0

0:5

6

20

14-0

8-2

8 0

1:0

0

20

14-0

8-2

8 0

1:0

4

20

14-0

8-2

8 0

1:0

8

20

14-0

8-2

8 0

1:1

2

20

14-0

8-2

8 0

1:1

6

20

14-0

8-2

8 0

1:2

0

20

14-0

8-2

8 0

1:2

4

20

14-0

8-2

8 0

1:2

8

20

14-0

8-2

8 0

1:3

2

20

14-0

8-2

8 0

1:3

6

20

14-0

8-2

8 0

1:4

0

20

14-0

8-2

8 0

1:4

4

20

14-0

8-2

8 0

1:4

8

20

14-0

8-2

8 0

1:5

2

20

14-0

8-2

8 0

1:5

6

セール開始

22

2. 東急ハンズでの活用方法について

以前のハンズネット の構成

WEB Servers API Servers

ELB ELB

データをファイルで持っていたため、サーバを増やすごとにファイル同期コストが増大

ユーザ

23

2. 東急ハンズでの活用方法について

改善後のハンズネットの構成

WEB Servers API Servers

ELB ELB

Data Layer

DynamoDB

S3

データ層は単一障害点にならないアーキテクチャの中から選定

Elastic Beanstalk

Beanstalk による Auto Scale

ユーザ

24

2. 東急ハンズでの活用方法について

データの種類・用途によるストレージの使い分け

ユーザーが生成するデータサービス提供側が生成するデータ

商品マスタ商品詳細情報店舗在庫数

セッション情報ショッピングカート購入履歴会員情報

順次作られる動的データ半静的データ、読み込み専用データ

お気に入り商品情報商品レビューネットストア在庫

価格特集コンテンツ画像

= 増え続けるデータ

DynamoDB S3 SQLite DynamoDB

= コントロール可能なデータ

25

DynamoDB所感

• データ容量の制限がないことや、大量アクセス時の安心感は大きい。• DynamoDBを使ったプログラムは、コード改修なしでスケールできる• DynamoDBは最初とっつきにくいので、一部から導入して、自信をつ

けたら範囲を広げていくのが良いかもしれない。

2. 東急ハンズでの活用方法について

→ ハンズでは、セッションから始めて商品データ、カートへと徐々に用途拡大して行った。

• DynamoDBだけで全部やろうとするとつらい。

→ 検索はCloudSearchにするなど、他のシステムとの併用も検討。

• 料金は安い。心配しないで使ってみて。

26

1. Amazon DynamoDBの紹介

3. おまけ(DynamoDB最新情報)

2. 東急ハンズでの活用について

27

3. おまけ

DynamoDB最新情報

• オンラインでGlobal Secondary Indexが作成できるように。• リザーブドキャパシティが 100Unitから購入できるように。

• 以前は4000Unitだったので、より小規模でも導入しやすく• 月額課金に比べて53%(1年)から76%(3年)のコスト削減が可

能• DynamoDB Streams が Preview リリース

• Redshiftや、CloudSearchなどとの連携がやりやすく

Let's work together!

・AWSエンジニア

・iOSエンジニア

・Webエンジニア

ハンズラボは積極的に技術者採用中です。

29

ぜひ手を動かして、触ってみてください!

ご清聴ありがとうございました。

Try ! DynamoDB

Recommended