Amazon DynamoDB 初心者が理解した事

63
Amazon DynamoDB JAWS-UG

description

2014-03-14 (金) JAWS DAYS 2014 前夜祭!! JAWS-UG 奥の細道 in 仙台で発表

Transcript of Amazon DynamoDB 初心者が理解した事

Page 1: Amazon DynamoDB 初心者が理解した事

Amazon DynamoDB初心者が理解した事

間違ってたら教えて下さい

JAWS-UG会津 德納

Page 2: Amazon DynamoDB 初心者が理解した事

自己紹介● 德納 弘和 (とくのう ひろかず)● 某社の工場のITシステム部門● 39才にして IT部門へ移動して4年目

– 遅れを取り戻すべく日夜勉強中● 少し覚えた言語

– VBA, SQL, JavaScript, Java, Perl, Shell...● コードを極力書かないのがお気に入り

– Pentaho ETL, Oracle APEX, Mojolicious

Page 3: Amazon DynamoDB 初心者が理解した事

2013年の学びと挑戦● ユニケージ開発手法● Perl, Mojolicious● Jenkins● 自動テスト jUnit, Mockito, shUnit2● Twitter Bootstrap, Google Maps APIなど● 勉強会の楽しさ!

– エフスタ!– オープンデータカフェ会津– JAWS-UG会津

● CODE for AIZU参加

Page 4: Amazon DynamoDB 初心者が理解した事

2014年の学びと挑戦● LODチャレンジ応募● Hack for Town in Aizu参加● Meteor(Node.js, MongoDB) on Nitrous.IO● GitHubデビュ〜● Amazon DynamoDB 今ここ

Page 5: Amazon DynamoDB 初心者が理解した事

クラウド素人です

Page 6: Amazon DynamoDB 初心者が理解した事

アカウントを作ったのは7日前

Page 7: Amazon DynamoDB 初心者が理解した事

DynamoDBって何?

● Fully Managed NoSQL Database Service

Page 8: Amazon DynamoDB 初心者が理解した事

DynamoDBって何?

● Fully Managed NoSQL Database Service

なんのこっちゃ?

Page 9: Amazon DynamoDB 初心者が理解した事

DynamoDBって何?

● Fully Managed NoSQL Database Service

– NoSQL– Fully Managed Database Service

分けて考えよう

Page 10: Amazon DynamoDB 初心者が理解した事

NoSQLの理解● Not only SQL● 巨大なデータの読み込み速度を上げる

– データ整合性を諦める● 柔軟なデータ構造 (DynamoDB他一部のみ)

– レコード毎に持つデータを変えられる● 集計とか検索は得意ではない

Page 11: Amazon DynamoDB 初心者が理解した事

Fully Managed DB Service

● サーバーの様にデータベースを借りられる– 読み書き速度、保存容量、転送量に課金

● 管理は全てAmazonにお任せ– インストール、アップグレード、パッチ– 保存容量確保 : 上限無し!– パフォーマンス調整– 3カ所に分散保存

Page 12: Amazon DynamoDB 初心者が理解した事

簡単に言うと● 面倒な事はAmazonにお任せ!● パフォーマンスはSSDでバカっぱや!● それでも不満なら金で解決!● 容量の増加を気にしなくて良い!● 3カ所に分散保管で信頼性抜群!● 普通のDBと得意分野が違うので気を付けろ!

Page 13: Amazon DynamoDB 初心者が理解した事

取り敢えず使ってみよう● Service - DynamoDB

Page 14: Amazon DynamoDB 初心者が理解した事

テーブル作成● Create Table

Page 15: Amazon DynamoDB 初心者が理解した事

テーブル設定● Primary Key(主キー)

– Hashだけ、又はHashとRangeの組み合わせ

Page 16: Amazon DynamoDB 初心者が理解した事

Primary Key

● Hash Key : データ分散用の項目– UserIDなどデータが集中しない項目を選ぶ– Game IDや年月など集中する項目を避ける

● Range Key :

– 範囲検索用の項目● この2項目で一意になるよう詰め込む

Page 17: Amazon DynamoDB 初心者が理解した事

Primary Keyの例● フォーラムを3つのテーブルで表す

Table Primary Key AttributesHash Range

Group JAWS-UG奥の細道

{ LastPostBy="Kurihara" LastPostDateTime= "2012-01-03T00:40:57.165Z"}

Thread JAWS-UG奥の細道

内容について { Message = "アンカンファレンスをしては?" Tags = [ "JAWS-UG", "東北" ] LastPostDateTime = "2012-01-03T00:40:57.165Z" }

Reply JAWS-UG奥の細道#内容について

2011-12-11T00:40:57.165Z

{ Message = "エクストリーム!" PostedBy = "Kurihara" }

Page 18: Amazon DynamoDB 初心者が理解した事

項目名 Attributes

● Hash, Range以外の中身● データ毎にAttributesが変わっても良い● 型

– String– Number– Binary– String Set (配列)– Number Set (配列)– Binary Set (配列)

日付などは文字列に変換

Page 19: Amazon DynamoDB 初心者が理解した事

Index作成● オプションなので何も設定しなくても良い

Page 20: Amazon DynamoDB 初心者が理解した事

Index

● テーブル当り検索用に各5項目を設定出来る– 裏では同期するHash-Rangeテーブルを作成– 書き込み、保存コストが発生

● 作成時のみ設定可能。 追加、変更出来ない。● Local secondary index

– Hash Keyはテーブルと同じ項目、Range Keyは別項目でHash-Rangeテーブルを作成

● Global secondary index

– HashもRangeもテーブルとは別項目でHas-Rangeテーブルを作成

Page 21: Amazon DynamoDB 初心者が理解した事

Index

● こんな風に動いているらしいHash Range Attribute1 Attribute2

A 1 あ い

B 2 う え

Hash Attribute2 Attribute1 Range

A い あ 1

B え う 2

Primary Key

Primary Key

Index

Page 22: Amazon DynamoDB 初心者が理解した事

性能設定● Read Capacity Unit

– 4KBのアイテムを1個/秒で読み込める● Write Capacity Unit

– 1KBのアイテムを1個/秒で書き込める

Page 23: Amazon DynamoDB 初心者が理解した事

警告の設定● 設定した性能の75~95%を超えた場合にメール通知を出せる

Page 24: Amazon DynamoDB 初心者が理解した事

最後に確認● お約束

¥60/月

Page 25: Amazon DynamoDB 初心者が理解した事

出来上がり!

● 3つ作ってみました。

Page 26: Amazon DynamoDB 初心者が理解した事

欠点● Indexの修正が出来ない

– 変えたくなると作り替え– 大量にデータを移すにはコストが発生

● ERD的な書類との同期の仕組みが無い (多分)● 向き、不向きがある

– Primary Key, Index以外を検索するには全件検索するしかない

– 一貫性のあるTransactionはRDBを使うかJavaのTransaction Libraryを使う必要がある

– RDBと併用が推奨されているが複雑化

Page 28: Amazon DynamoDB 初心者が理解した事

SDKに用意されているAPI

● Table操作– CreateTable– DeleteTable– DescribeTable– ListTables– UpdateTable

● バッチ処理– BatchGetItem– BatchWriteItem

● Item操作– PutItem– GetItem– UpdateItem– DeleteItem

● 検索– Query : Primary

or Index– Scan : 総なめ

Page 29: Amazon DynamoDB 初心者が理解した事

あそんでみよう!

Page 30: Amazon DynamoDB 初心者が理解した事

NoSQLと言えばビッグデータ

Page 31: Amazon DynamoDB 初心者が理解した事

ビッグデータと言えばTwitter解析

Page 32: Amazon DynamoDB 初心者が理解した事

気になる疑問を徹底検証!

Page 33: Amazon DynamoDB 初心者が理解した事

調べる事は、、、

Page 34: Amazon DynamoDB 初心者が理解した事

自主規制

Page 35: Amazon DynamoDB 初心者が理解した事

仕方ないので

Page 36: Amazon DynamoDB 初心者が理解した事

WebSockで掲示板

Page 37: Amazon DynamoDB 初心者が理解した事

多くの例があって面白く無い

Page 38: Amazon DynamoDB 初心者が理解した事

RESTfull APIを作ってみよう!

Page 39: Amazon DynamoDB 初心者が理解した事

こんな感じ

DynamoDBNitrous.IOWeb Client

●全部ただ

Page 40: Amazon DynamoDB 初心者が理解した事

RESTfull API

● 簡単なものだけ実装しました– BatchGetItemとBatchWriteItemは未実装

操作 Function Method URL例Create putItem POST /Group/Hash?p=1&q=A

Read scangetItem

GET /Groups/Groups/Hash

Update updateItem PUT /Group/Hash?p=A&q=1

Delete deleteItem DELETE /Group/Hash

Page 41: Amazon DynamoDB 初心者が理解した事

Create by POST

● curl -i -X POST -H "Content-Type: application/json" -d '{"datetime":"2013-03-13T23:27:32.256Z" , "by":"とくのう"}' http://your_host:8080/Group/JAWS-UG

Page 42: Amazon DynamoDB 初心者が理解した事

Read all by GET

● curl -H "Content-Type: application/json" http://your_host:8080/Groups

Page 43: Amazon DynamoDB 初心者が理解した事

Read by GET

● curl -H "Content-Type: application/json" http://your_host:8080/Group/JAWS-UG奥の細道

日本語はURIエンコードしましょう

Page 44: Amazon DynamoDB 初心者が理解した事

Update by PUT

● curl -i -X PUT -H "Content-Type: application/json" -d '{"datetime":"2021-03-14T00:04:01.951Z" , "by":"連れて行って貰った事ありません"}' http://your_host:8080/Group/JAWS-UG

Page 45: Amazon DynamoDB 初心者が理解した事

Delete by DELETE

● curl -i -X DELETE http://your_host:8080/Group/JAWS-UG

Page 46: Amazon DynamoDB 初心者が理解した事

もう一捻り欲しい

Page 47: Amazon DynamoDB 初心者が理解した事
Page 48: Amazon DynamoDB 初心者が理解した事

こんな感じ

DynamoDBNitrous.IOPentaho ETL

●これも全部無料

Page 49: Amazon DynamoDB 初心者が理解した事

データ処理ならPentaho

● でもDynamoDBの速度制限で早く無い● 早くしたいなら金を出す

Group LastPostDateTime LastPostByあ 2013-03-13T23:27:32.256Z とくのうい 2013-03-13T23:27:32.256Z とくのうう 2013-03-13T23:27:32.256Z とくのうえ 2013-03-13T23:27:32.256Z とくのうお 2013-03-13T23:27:32.256Z とくのうか 2013-03-13T23:27:32.256Z とくのうき 2013-03-13T23:27:32.256Z とくのうく 2013-03-13T23:27:32.256Z とくのうけ 2013-03-13T23:27:32.256Z とくのうこ 2013-03-13T23:27:32.256Z とくのうあ1 2013-03-13T23:27:32.256Z とくのうい1 2013-03-13T23:27:32.256Z とくのうう1 2013-03-13T23:27:32.256Z とくのうえ1 2013-03-13T23:27:32.256Z とくのうお1 2013-03-13T23:27:32.256Z とくのうか1 2013-03-13T23:27:32.256Z とくのうき1 2013-03-13T23:27:32.256Z とくのう

Page 50: Amazon DynamoDB 初心者が理解した事

まとめ● 管理は全てAmazonにお任せで楽!● 外部キーが無いがアプリ側で実装しているのが実態らしい– けっこう面倒

● Indexの追加、削除が出来ないのは痛い● 柔軟に検索出来ない。 1MB毎に再検索とか● 実体とドキュメントを同期させる方法が欲しい

● 使い捨てと巨大なデータを持つシステムだけが美味しい使い方?

Page 51: Amazon DynamoDB 初心者が理解した事

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

Page 52: Amazon DynamoDB 初心者が理解した事

実績● 2014.03.08 アカウント作成● 2014.03.11 Hack for Town 3年の

2014.03.11 クロスオーバー振り返り参加● 2014.03.12 Game Lab成果発表会参加● 2014.03.13 RESTfull 開発、Pentahoで遊ぶ● 2014.03.14 発表

Page 53: Amazon DynamoDB 初心者が理解した事

Appendix

Page 54: Amazon DynamoDB 初心者が理解した事

Region

● ここで使っているRegionを見つけた。– http://docs.aws.amazon.com/general/latest/gr/rande.html

Page 55: Amazon DynamoDB 初心者が理解した事

Credentialsの確認方法

Page 56: Amazon DynamoDB 初心者が理解した事

IAM

Page 57: Amazon DynamoDB 初心者が理解した事

Create a New Group of Users

Page 58: Amazon DynamoDB 初心者が理解した事

Group名

Page 59: Amazon DynamoDB 初心者が理解した事

Permissions

● 全部出来るPower User Accessを選択

Page 60: Amazon DynamoDB 初心者が理解した事

Policy確認● だから何って感じだけど見さされる

Page 61: Amazon DynamoDB 初心者が理解した事

Create User

Page 62: Amazon DynamoDB 初心者が理解した事

Userの確認

Page 63: Amazon DynamoDB 初心者が理解した事

Credentials

● やっと確認