Amazon DynamoDB 初心者が理解した事
-
Upload
hirokazu-tokuno -
Category
Technology
-
view
1.312 -
download
10
description
Transcript of Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB初心者が理解した事
間違ってたら教えて下さい
JAWS-UG会津 德納
自己紹介● 德納 弘和 (とくのう ひろかず)● 某社の工場のITシステム部門● 39才にして IT部門へ移動して4年目
– 遅れを取り戻すべく日夜勉強中● 少し覚えた言語
– VBA, SQL, JavaScript, Java, Perl, Shell...● コードを極力書かないのがお気に入り
– Pentaho ETL, Oracle APEX, Mojolicious
2013年の学びと挑戦● ユニケージ開発手法● Perl, Mojolicious● Jenkins● 自動テスト jUnit, Mockito, shUnit2● Twitter Bootstrap, Google Maps APIなど● 勉強会の楽しさ!
– エフスタ!– オープンデータカフェ会津– JAWS-UG会津
● CODE for AIZU参加
2014年の学びと挑戦● LODチャレンジ応募● Hack for Town in Aizu参加● Meteor(Node.js, MongoDB) on Nitrous.IO● GitHubデビュ〜● Amazon DynamoDB 今ここ
クラウド素人です
アカウントを作ったのは7日前
DynamoDBって何?
● Fully Managed NoSQL Database Service
DynamoDBって何?
● Fully Managed NoSQL Database Service
なんのこっちゃ?
DynamoDBって何?
● Fully Managed NoSQL Database Service
– NoSQL– Fully Managed Database Service
分けて考えよう
NoSQLの理解● Not only SQL● 巨大なデータの読み込み速度を上げる
– データ整合性を諦める● 柔軟なデータ構造 (DynamoDB他一部のみ)
– レコード毎に持つデータを変えられる● 集計とか検索は得意ではない
Fully Managed DB Service
● サーバーの様にデータベースを借りられる– 読み書き速度、保存容量、転送量に課金
● 管理は全てAmazonにお任せ– インストール、アップグレード、パッチ– 保存容量確保 : 上限無し!– パフォーマンス調整– 3カ所に分散保存
簡単に言うと● 面倒な事はAmazonにお任せ!● パフォーマンスはSSDでバカっぱや!● それでも不満なら金で解決!● 容量の増加を気にしなくて良い!● 3カ所に分散保管で信頼性抜群!● 普通のDBと得意分野が違うので気を付けろ!
取り敢えず使ってみよう● Service - DynamoDB
テーブル作成● Create Table
テーブル設定● Primary Key(主キー)
– Hashだけ、又はHashとRangeの組み合わせ
Primary Key
● Hash Key : データ分散用の項目– UserIDなどデータが集中しない項目を選ぶ– Game IDや年月など集中する項目を避ける
● Range Key :
– 範囲検索用の項目● この2項目で一意になるよう詰め込む
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" }
項目名 Attributes
● Hash, Range以外の中身● データ毎にAttributesが変わっても良い● 型
– String– Number– Binary– String Set (配列)– Number Set (配列)– Binary Set (配列)
日付などは文字列に変換
Index作成● オプションなので何も設定しなくても良い
Index
● テーブル当り検索用に各5項目を設定出来る– 裏では同期するHash-Rangeテーブルを作成– 書き込み、保存コストが発生
● 作成時のみ設定可能。 追加、変更出来ない。● Local secondary index
– Hash Keyはテーブルと同じ項目、Range Keyは別項目でHash-Rangeテーブルを作成
● Global secondary index
– HashもRangeもテーブルとは別項目でHas-Rangeテーブルを作成
Index
● こんな風に動いているらしいHash Range Attribute1 Attribute2
A 1 あ い
B 2 う え
Hash Attribute2 Attribute1 Range
A い あ 1
B え う 2
Primary Key
Primary Key
Index
性能設定● Read Capacity Unit
– 4KBのアイテムを1個/秒で読み込める● Write Capacity Unit
– 1KBのアイテムを1個/秒で書き込める
警告の設定● 設定した性能の75~95%を超えた場合にメール通知を出せる
最後に確認● お約束
¥60/月
出来上がり!
● 3つ作ってみました。
欠点● Indexの修正が出来ない
– 変えたくなると作り替え– 大量にデータを移すにはコストが発生
● ERD的な書類との同期の仕組みが無い (多分)● 向き、不向きがある
– Primary Key, Index以外を検索するには全件検索するしかない
– 一貫性のあるTransactionはRDBを使うかJavaのTransaction Libraryを使う必要がある
– RDBと併用が推奨されているが複雑化
コンソール以外からも!● 公式SDK達● 非公式もPerlなどたくさん
Android Browser iOS
Java .NET Node.js
Python PHP Ruby
SDKに用意されているAPI
● Table操作– CreateTable– DeleteTable– DescribeTable– ListTables– UpdateTable
● バッチ処理– BatchGetItem– BatchWriteItem
● Item操作– PutItem– GetItem– UpdateItem– DeleteItem
● 検索– Query : Primary
or Index– Scan : 総なめ
あそんでみよう!
NoSQLと言えばビッグデータ
ビッグデータと言えばTwitter解析
気になる疑問を徹底検証!
調べる事は、、、
自主規制
仕方ないので
WebSockで掲示板
多くの例があって面白く無い
RESTfull APIを作ってみよう!
こんな感じ
DynamoDBNitrous.IOWeb Client
●全部ただ
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
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
Read all by GET
● curl -H "Content-Type: application/json" http://your_host:8080/Groups
Read by GET
● curl -H "Content-Type: application/json" http://your_host:8080/Group/JAWS-UG奥の細道
日本語はURIエンコードしましょう
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
Delete by DELETE
● curl -i -X DELETE http://your_host:8080/Group/JAWS-UG
もう一捻り欲しい
こんな感じ
DynamoDBNitrous.IOPentaho ETL
●これも全部無料
データ処理なら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 とくのう
まとめ● 管理は全てAmazonにお任せで楽!● 外部キーが無いがアプリ側で実装しているのが実態らしい– けっこう面倒
● Indexの追加、削除が出来ないのは痛い● 柔軟に検索出来ない。 1MB毎に再検索とか● 実体とドキュメントを同期させる方法が欲しい
● 使い捨てと巨大なデータを持つシステムだけが美味しい使い方?
ご清聴ありがとうございました
実績● 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 発表
Appendix
Region
● ここで使っているRegionを見つけた。– http://docs.aws.amazon.com/general/latest/gr/rande.html
Credentialsの確認方法
IAM
Create a New Group of Users
Group名
Permissions
● 全部出来るPower User Accessを選択
Policy確認● だから何って感じだけど見さされる
Create User
Userの確認
Credentials
● やっと確認