Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20分で分かるDynamoDB/DynamoDB in 20 minutes

20分で分かるDynamoDB/DynamoDB in 20 minutes

https://jawsug-nagoya.doorkeeper.jp/events/81320
2018-10-17(水) JAWS-UG名古屋 AWS勉強会 データベース祭りでの発表です。
re:Invent 2018 発表で古くなった部分(限定的なトランザクション対応やキャパシティプランニングが不要なモードなど)はありますが、全体的には参考になるかと思います。

TATSUNO Yasuhiro

October 17, 2018
Tweet

More Decks by TATSUNO Yasuhiro

Other Decks in Programming

Transcript

  1. 様々なDB技術の中で DynamoDB の位置付け RDB KVS ドキュメントDB グラフDB 列指向DB 特徴 長い歴史で技術

    が成熟、ノウハ ウも蓄積。 標準化されたク エリ言語SQL キーと値を保存。 構造が単純なの で取得も更新も 高速にしやすい JSONやXMLなど 複雑な構造の データをそのまま 扱える ノードとエッジを 持つグラフをその まま扱える ・CPU/メモリの特 性を考慮したデー タ構造 ・高圧縮、高速 AWS RDS DynamoDB ElasticCache DynamoDB Elasticsearch Service Neptune Redshift 代表的な OSS NoSQL ≒ RDB以外のDB技術の総称 RDB
  2. DynamoDBはいつ使うべき? オリジナル: https://read.acloud.guru/why-amazon-dynamodb-isnt-for-everyone- and-how-to-decide-when-it-s-for-you-aefc52ea9476 小さいPJ/個人PJ 他のDBのキャッシュ などに使いたい マジです 大きなデータや Blobを保存する

    詳しく サーバーレス アプリに使う はい KeyでValueを 引くだけで十分 いいえ 経験あり い い え は い はい はい いいえ はい いいえ いいえ 未 経 験 何するか 自覚してる? Dynamo以外の 選択肢も考えて 複雑なクエ リが必要? 数百万アイテム級、 数百GB級に なりそう? Dynamoや NoSQLを 使った経験? バックアップ やリストアは 必要? アプリやバックエン ドを2~3回書き直す 覚悟はある? DynamoのAPI の制約で監視 しにくいけど 大丈夫? Dynamoは あなたの設計に ピッタリ! 使うべき? OK。小規模PJやプロ トタイプなら、もっ てこい RDB (Aurora) にしとけ 学習コスト高 いよ。他の DBにしたら? 今となっては当てはまらない部分もあるが、 慣れ親しんだRDBとは違うのでよく考えて 使いましょう
  3. RDBとDynamoDBの基本用語 RDB DynamoDB テーブル テーブル プライマリキー:必須でない プライマリキー:必須 属性(Attribute)列=カラムとも言う 属性(Attribute) レコード

    アイテム スキーマあり スキーマレス(スキーマなし) インデックス インデックス ・Global Secondary Index ・Local Secondary Index 実行計画 なし JOIN なし
  4. アイテム構造 ①ドキュメント JSONやXMLのように階層構造や 配列や集合などが使える ②スキーマレス プライマリキー以外は、アイテムご とにバラバラになってもよい。 運用しながらスキーマを変えられる { "event_id":

    12345678, "name": "JAWS-UG名古屋 DBまつり", "begins": "2018-10-17 19:00", "venue": "JPタワー", "geo": { "lat": 35.17111, "lon": 136.882416 }, "members": [ "kawaji", "kobayashi", "sugimoto", "mori", "tatsuno" ] } この例は分かりやすく一般的なJSONにし ています。実際のDynamoDBの構造はもう 少し複雑です。
  5. 属性に使えるデータ型 分類 データ型 Java スカラー型 ただ1つの値 数値 10進38桁精度 すべての数値型 UTF-8文字列

    1文字以上 String バイナリ base64文字列 ByteBufferなど 真偽値 Boolean/boolean Null null ドキュメント型 1つ以上の値 リスト List<T> マップ ユーザ定義型やMap<K,V> セット型 同じ型の1つ以上の値 数値セット Set<数値型> 文字列セット Set<String> バイナリセット Set<Byte> 日付:数値(unixtime)または 文字列(ISO-8601形式)として保存
  6. DynamoDBアイテムの取り出し操作 GetItem Query Scan 取得対象 指定のハッシュキー(とレ ンジキー)を持つアイテム 指定のハッシュキー(とレ ンジキー)を持つアイテム のうち、条件に合うもの

    全アイテムから条件にあう もの。RDBフルスキャン相当 取得数 1 0以上 0以上 インデックス 使われる 使われる 使われない A1 A2 A3 B1 B2 C1 C2 D1 E1 E2 GetItem Scan Query テーブル
  7. DynamoDBでできないこと:トランザクション 分散DBを前提としてるので、複数レコードや複数テーブルにまたが る変更を1つの論理操作にできない。 代替手段 ▪ 1レコード – 楽観ロック(Compare and Swap)

    :取得時の更新日から変わってなけ れば更新 – 原始的アップデート(Atomic Counter) :連番IDなど ▪ 複数レコード/テーブル – 更新操作をキューにためて、1つずつ処理していく 擬似的にトランザクションを実現するライブラリがあります(Java用AWS SDKのみ対応) https://github.com/awslabs/dynamodb-transactions
  8. DynamoDBの性能 ▪ 「1秒間の性能=キャパシティがどれだけ欲しい」をテー ブルごとに指定できます ▪ 必要なだけスケールアウトできます ▪ データの素性に基づいた「実行計画」がないので、予測 はしやすいです。 Read

    Capacity Unit 読み込みキャパシティ Write Capacity Unit 書き込みキャパシティ 1 CU の意味 最大4KBの1アイテムを 1秒あたり1回読める(強力な整合性) 1秒あたり2回読める(結果整合性) 最大1KBの項目を 1回書き込める 1 CU の料金 0.000148 US$/RCU 0.000742 US$/RCU 1 ヶ月の料金例 最大1KBで500RCU → $51.6 最大1KBで50WCU→$13.58