SlideShare a Scribd company logo
DynamoDBを
導入した話
ビズリーチ
プロダクト開発部
北川 俊広
自己紹介
● 北川 俊広
● 2016/03 ビズリーチ入社
● DBA
● ビズリーチサービスの DB 周りを担当
● 使ったことがある DB
PostgreSQL, MySQL, DynamoDB
目次
● DynamoDBの仕様と特徴
● MySQLのテーブルをDynamoDBに移行する
● 日々の運用
DynamoDBの仕様と特徴
DynamoDBとは
● 完全マネージド型の NoSQL データベースサービス
● ユーザは以下を心配する必要なし
○ ハードウェア
○ 設定、構成
○ レプリケーション
○ ソフトウェア修正プログラムの適用
○ クラスターのスケーリング
● 高速で予測可能なパフォーマンス
● 高いスケーラビリティ
● ストレージの容量制限なし
DynamoDBの概念
● テーブル
一般的なデータベースと同様にテーブルにデータを格納する。
● アイテム(項目)
テーブルには複数のアイテム(項目)が含まれる。
RDBMSでいうところのレコード。最大400KBまで。
● 属性
アイテムは1つ以上の属性で構成される。
RDBMSでいうところのフィールド。
● プライマリキー
アイテムを一意に識別するためのキー。省略不可。
プライマリーキーの種類
● パーティションキー(Hash key)
1つの属性で構成されるシンプルなプライマリーキー。
ハッシュ関数によってパーティションが決まる。
2つ以上のアイテムで同じパーティションキーを使用することはできない。
● パーティションキー(Hash key)とソートキー(Range key)
2つの属性で構成される複合プライマリーキー。
パーティションキーにより保存されるパーティションが決まり、ソートキーでソートさ
れてデータが格納される。一意性は、パーティションキーとソートキーの組み合わせ
で判断される。
インデックス
プライマリキー以外の属性を使用してデータを読みたい場合は、セカンダリインデックス
が利用できる。インデックスを張る属性は一意性がなくてもよい。
● グローバルセカンダリインデックス(GSI)
テーブルと異なるパーティションキーとソートキーを持つインデックス。ソートキーは
必須ではない。
● ローカルセカンダリインデクス(LSI)
テーブルと同じパーティションキーと異なるソートキーを持つインデックス。
それぞれ、1テーブルにつき5つまで作成でき、射影する属性は選択できる。
テーブルの具体例
● Primary key
○ RId_CId (Partition key)
○ AccessTM (Sort Key)
● GSI
○ RId (Partition key)
○ AccessTM (Sort key)
RId_CId AccessTM AccessDate RId
Footprint テーブル
データ型
● スカラ型
数値、文字列(UTF-8)、バイナリ、ブール、null
● ドキュメント型
リスト:[“Bizreach”, “CareerTreck”, 2009]
マップ:JSONオブジェクト
● セット型
数値セット、文字セット、バイナリセット
文字列の長さは0より大きい必要があるため、空文字は格納できない。
日付・時刻は?
● ISO 8601 形式(文字列)
○ 2017-06-13
○ 2017-06-13T19:45:00Z
○ 20170613T194500Z
● UNIX 時間(数値)
○ エポック時間: 1970 年 1 月 1 日 12:00:00 AM UTC からの経過秒数
○ Time To Live(TTL)機能を使用する場合は必須の属性
読み込み整合性
● 結果整合性のある読み込み(デフォルト)
応答で古いデータが返る可能性がある。
● 強い整合性のある読み込み
常に最新のデータが返る。
GSIは、結果整合性のある読み込みのみサポート。
プロビジョニングされたスループット
=キャパシティーユニット
● 読み込みキャパシティーユニット1
最大サイズ 4 KB の項目について、1 秒あたり 1 回の強力な整合性のある読み込
み、あるいは 1 秒あたり 2 回の結果的に整合性のある読み込みを表す。
● 書き込みキャパシティーユニット1
最大サイズ 1 KB の項目について、1 秒あたり 1 回の書き込みを表す。
プロビジョニングされたスループットを超えると、リクエストは HTTP 400 コード (Bad
Request) と ProvisionedThroughputExceededException で失敗する。ただし、バースト
キャパシティという予備のキャパシティがあるので、必ず失敗するわけではない。
キャパシティー設定
Scan
Query
ScanとQueryのスループット消費
● 処理された項目の累計サイズをもとにスループットが計算される。
● たとえば1KBの項目を100個取り出した場合
(100 * 1024 bytes = 100 KB) / 4 KB = 25 読み込みキャパシティーユニット
● 項目サイズは属性名と属性値の長さの合計
「キャパシティーユニットの消費を最適化するには、属性名の長さをできるだけ短く
することをお勧めします。」開発者ガイドより
料金(東京リージョン)
● 書き込みスループット
書き込みキャパシティー 10 ユニットごとに 0.00742USD/hour
● 読み込みスループット
読み込みキャパシティー 50 ユニットごとに 0.00742USD/hour
● 毎月最初の 25 GB の保管は無料、それ以降は月額 0.285USD/GB
MySQLのテーブルを
DynamoDBに移行する
移行しづらいテーブル
● 1行のサイズが大きい
● バッチ処理などで大量にデータを取得する
● RDBMSの特性を多用している
○ Join
○ サブクエリ
○ 集約関数
テーブル移行スケジュール
MySQLから読み込み
MySQLへの書き込み
DynamoDBへの書き込み
DynamoDBへ
過去データコピー
DynamoDBから読み込み
MySQLからDynamoDBへの
過去データコピー
MySQLからデータを取得する
※ファイル内にプライマリキーの重複が
 あるとインポートできない!
書き込みキャパシティーの調整
パーティション分割問題 (1/2)
パーティション分割問題 (2/2)
インポート
読み込み書き込みキャパシティーの調整
インポート結果の確認
Redshift にコピーして確認するのが便利
CREATE TABLE operator_login_log_temp (opid BIGINT, lt TEXT, ….);
COPY operator_login_log_temp FROM 'dynamodb://OperatorLoginLog' credentials
'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-
Access-Key>' readratio 50;
※ DynamoDB の属性名に Redshift の予約語を使用しないように注意
読み込みキャパシティーの調整
日々の運用
キャパシティー調整
● バッチ処理
● Redshift へのデータコピー
● バックアップ
弊社では、キャパシティを調整する仕組みを Lambda で自前実装。
キャパシティは aws cli でも変更できるので、一番お手軽なのは cron での変更。
スループットに応じて自動調整を行いたい場合は、Dynamic DynamoDB が便利。
https://dynamic-dynamodb.readthedocs.io/
スループットの変動に注意
● 日々スループットを確認
● 新機能のリリースなどは注意
● メンテナンス明けのスループット変動に注意
ご静聴ありがとうございました

More Related Content

PDF
ソフトウェアにおける 複雑さとは何なのか?
PPTX
初心者向けMongoDBのキホン!
PPTX
マイクロサービスにおける 結果整合性との戦い
PDF
イミュータブルデータモデルの極意
PDF
Dockerからcontainerdへの移行
PPTX
本当は恐ろしい分散システムの話
PDF
イミュータブルデータモデル(世代編)
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
ソフトウェアにおける 複雑さとは何なのか?
初心者向けMongoDBのキホン!
マイクロサービスにおける 結果整合性との戦い
イミュータブルデータモデルの極意
Dockerからcontainerdへの移行
本当は恐ろしい分散システムの話
イミュータブルデータモデル(世代編)
コンテナ未経験新人が学ぶコンテナ技術入門

What's hot (20)

PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
PPTX
Apache Avro vs Protocol Buffers
PDF
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
PPTX
深い親子関係のテーブル設計
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
PDF
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
PPTX
世界一わかりやすいClean Architecture
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PPTX
地理分散DBについて
PPTX
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
PDF
HBaseを用いたグラフDB「Hornet」の設計と運用
PDF
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
PPTX
DevOps勉強会
PDF
分散システムの限界について知ろう
PDF
Docker道場オンライン#1 Docker基礎概念と用語の理解
PDF
Google Cloud のネットワークとロードバランサ
PDF
ガチ(?)対決!OSSのジョブ管理ツール
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
Apache Avro vs Protocol Buffers
HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ
深い親子関係のテーブル設計
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
世界一わかりやすいClean Architecture
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
地理分散DBについて
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
強いて言えば「集約どう実装するのかな、を考える」な話
HBaseを用いたグラフDB「Hornet」の設計と運用
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
DevOps勉強会
分散システムの限界について知ろう
Docker道場オンライン#1 Docker基礎概念と用語の理解
Google Cloud のネットワークとロードバランサ
ガチ(?)対決!OSSのジョブ管理ツール
Ad

Similar to DynamoDBを導入した話 (20)

PPTX
Dynamo db はじめの一歩
PDF
About NoSQL
PPTX
DynamoDBとはとは
PDF
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
PDF
ビッグデータやIoTシステムを支えるデータベース 『GridDB』
PDF
トランザクションもDWHもクラウドで 2015年10月~IBM OnDemandセミナー
PDF
Db2 Warehouse on Cloud Flex ご紹介資料 2020年3月版
PPTX
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
PPTX
AIやマイクロサービスを活用したDynamoDB節約術
PDF
商用RDBMSのAWSへの移行
PDF
AWS初心者向けWebinar AWSでのNoSQLの活用
PPT
Cassandra(no sql)によるシステム提案と開発
PDF
PHP開発者のためのNoSQL入門
PDF
Not only sql _ 新卒エンジニア勉強会20130417
PDF
Yahoo! JAPANのOracle構成-2017年版
PDF
既存システムへの新技術活用法 ~fluntd/MongoDB~
PPTX
たくさんあるよMy sql互換db(正式版)
PDF
もうSQLとNoSQLを選ぶ必要はない!? ~両者を備えたスケールアウトデータベースGridDB~
PDF
DBワークロードのAWS化とデータベースサービス関連最新情報
PPTX
Yahoo! JAPANのOracle構成-2017年版
Dynamo db はじめの一歩
About NoSQL
DynamoDBとはとは
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
ビッグデータやIoTシステムを支えるデータベース 『GridDB』
トランザクションもDWHもクラウドで 2015年10月~IBM OnDemandセミナー
Db2 Warehouse on Cloud Flex ご紹介資料 2020年3月版
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
AIやマイクロサービスを活用したDynamoDB節約術
商用RDBMSのAWSへの移行
AWS初心者向けWebinar AWSでのNoSQLの活用
Cassandra(no sql)によるシステム提案と開発
PHP開発者のためのNoSQL入門
Not only sql _ 新卒エンジニア勉強会20130417
Yahoo! JAPANのOracle構成-2017年版
既存システムへの新技術活用法 ~fluntd/MongoDB~
たくさんあるよMy sql互換db(正式版)
もうSQLとNoSQLを選ぶ必要はない!? ~両者を備えたスケールアウトデータベースGridDB~
DBワークロードのAWS化とデータベースサービス関連最新情報
Yahoo! JAPANのOracle構成-2017年版
Ad

More from dcubeio (20)

PDF
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
PDF
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
PDF
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
PDF
20171206 d3 health_tech発表資料
PDF
Go初心者がGoでコマンドラインツールの作成に挑戦した話
PDF
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
PDF
BizReach x Marketo連携
PPTX
Kinesis Firehoseを使ってみた
PDF
Apiドキュメンテーションツールを使いこなす【api blueprint編】
PPTX
春の脆弱性祭り 2017/06/13
PPTX
Play2 scalaを2年やって学んだこと
PDF
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
PPT
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
PDF
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
PDF
【freee】プロダクトマネージャーの仕事と魅力
PDF
【ビズリーチ】プロダクトマネージャーの仕事と魅力
PDF
Python × Herokuで作る 雑談slack bot
PPTX
HR Tech x 機械学習 導入事例紹介
PPTX
Scalaマクロ入門 bizr20170217
PDF
機械学習を支えるX86 64の拡張命令セットを読む会 20170212
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
20171206 d3 health_tech発表資料
Go初心者がGoでコマンドラインツールの作成に挑戦した話
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
BizReach x Marketo連携
Kinesis Firehoseを使ってみた
Apiドキュメンテーションツールを使いこなす【api blueprint編】
春の脆弱性祭り 2017/06/13
Play2 scalaを2年やって学んだこと
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
【freee】プロダクトマネージャーの仕事と魅力
【ビズリーチ】プロダクトマネージャーの仕事と魅力
Python × Herokuで作る 雑談slack bot
HR Tech x 機械学習 導入事例紹介
Scalaマクロ入門 bizr20170217
機械学習を支えるX86 64の拡張命令セットを読む会 20170212

DynamoDBを導入した話