More Related Content Similar to Amazon DynamoDB 初心者が理解した事 (20) More from Hirokazu Tokuno (20) Amazon DynamoDB 初心者が理解した事2. 自己紹介
● 德納 弘和 (とくのう ひろかず)
● 某社の工場のITシステム部門
● 39才にして IT部門へ移動して4年目
– 遅れを取り戻すべく日夜勉強中
● 少し覚えた言語
– VBA, SQL, JavaScript, Java, Perl, Shell...
● コードを極力書かないのがお気に入り
– Pentaho ETL, Oracle APEX, Mojolicious
3. 2013年の学びと挑戦
● ユニケージ開発手法
● Perl, Mojolicious
● Jenkins
● 自動テスト jUnit, Mockito, shUnit2
● Twitter Bootstrap, Google Maps APIなど
● 勉強会の楽しさ!
– エフスタ!
– オープンデータカフェ会津
– JAWS-UG会津
● CODE for AIZU参加
10. NoSQLの理解
● Not only SQL
● 巨大なデータの読み込み速度を上げる
– データ整合性を諦める
● 柔軟なデータ構造 (DynamoDB他一部のみ)
– レコード毎に持つデータを変えられる
● 集計とか検索は得意ではない
11. Fully Managed DB Service
● サーバーの様にデータベースを借りられる
– 読み書き速度、保存容量、転送量に課金
● 管理は全てAmazonにお任せ
– インストール、アップグレード、パッチ
– 保存容量確保 : 上限無し!
– パフォーマンス調整
– 3カ所に分散保存
16. Primary Key
● Hash Key : データ分散用の項目
– UserIDなどデータが集中しない項目を選ぶ
– Game IDや年月など集中する項目を避ける
● Range Key :
– 範囲検索用の項目
● この2項目で一意になるよう詰め込む
17. Primary Keyの例
● フォーラムを3つのテーブルで表す
Table Primary Key Attributes
Hash 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"
}
18. 項目名 Attributes
● Hash, Range以外の中身
● データ毎にAttributesが変わっても良い
● 型
– String
– Number
– Binary
– String Set (配列)
– Number Set (配列)
– Binary Set (配列)
日付などは文字列に変換
26. 欠点
● Indexの修正が出来ない
– 変えたくなると作り替え
– 大量にデータを移すにはコストが発生
● ERD的な書類との同期の仕組みが無い (多分)
● 向き、不向きがある
– Primary Key, Index以外を検索するには全件
検索するしかない
– 一貫性のあるTransactionはRDBを使うか
JavaのTransaction Libraryを使う必要がある
– RDBと併用が推奨されているが複雑化
28. SDKに用意されているAPI
● Table操作
– CreateTable
– DeleteTable
– DescribeTable
– ListTables
– UpdateTable
● バッチ処理
– BatchGetItem
– BatchWriteItem
● Item操作
– PutItem
– GetItem
– UpdateItem
– DeleteItem
● 検索
– Query : Primary
or Index
– Scan : 総なめ
40. RESTfull API
● 簡単なものだけ実装しました
– BatchGetItemとBatchWriteItemは未実装
操作 Function Method URL例
Create putItem POST /Group/Hash?p=1&q=A
Read scan
getItem
GET /Groups
/Groups/Hash
Update updateItem PUT /Group/Hash?p=A&q=1
Delete deleteItem DELETE /Group/Hash
41. 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
42. Read all by GET
● curl -H "Content-Type: application/json"
http://your_host:8080/Groups
43. Read by GET
● curl -H "Content-Type: application/json"
http://your_host:8080/Group/JAWS-UG奥の細
道
日本語はURIエンコードしましょう
44. 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
49. データ処理なら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 とくのう
52. 実績
● 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 発表