Amazon DynamoDB 初心者が理解した事

1,923
-1

Published on

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

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,923
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
15
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Amazon DynamoDB 初心者が理解した事

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

×