Upload
taiji-inoue
View
4.129
Download
5
Embed Size (px)
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