More Related Content
Similar to Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪 (20)
Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪
- 4. やること
□ 概説
□ Management Console から利用する
・Table の作成
・Throughput の変更
・Item の登録、取得、更新
□ Eclipse から利用する(Java)
・デモンストレーション
□ 手乗りDynamoDB
・デモンストレーション
- 5. Amazon DynamoDB とは
□ 完全マネージド型の NoSQL データベースサービス
・管理不要で高い拡張性を提供
・ハードウェア調達、インストール、設定、レプリケーション、
ソフトウェア修正プログラムの適用、クラスタ化 が不要
・開発者はAPI経由で利用するだけ(SDK)
□ 高い拡張性
・データベース容量は自動的に拡張
・パフォーマンスを指定できる
・利用者がダイヤルを設定するようにパフォーマンスを設定
・秒間あたりの、読み込み/書き込みスループットを指定
- 6. Amazon DynamoDB とは
□ データへの高速なアクセス
・AWSクラウドの特性を活用
・十分な数のハードウェアに分散し、安定した高いパフォーマンスを提供
・SSDを利用して高速アクセス
・データベースが大規模になっても、数ミリ秒のアクセス速度を期待
□ 高い信頼性
・同期レプリケーションアーキテクチャ
・データを複数のAZ(データセンター)にコピー
・データセンターレベルの障害からもデータを守る
- 7. Amazon DynamoDB とは
□ 整合性モデル
・読み込みに対して結果的に整合性のある読み込みを設定するか
強い整合性を設定するかを指定できる
□ Local Secondary Indexes
・テーブル毎に最大5つのローカルセカンダリインデックスをサポート
・テーブルの属性の一部もしくは全てを射影できる
□ Amazon EMR 連携
・S3 への Export / Import、Query、Join
- 8. Data Model
□ Tables Items Attributes
DynamoDB Table1
Table2
Table N
・・・
Item1
Item2
Item3
Item N
・・・
{
Id = 101
ProductName = "Book 101 Title"
ISBN = "111-1111111111"
Authors = [ "Author 1", "Author 2" ]
Price = -2
Dimensions = "8.5 x 11.0 x 0.5"
PageCount = 500
InPublication = 1
ProductCategory = "Book"
}
Attribute
{
Id = 201
ProductName = "18-Bicycle 201"
Description = "201 description"
BicycleType = "Road"
Brand = "Brand-Company A"
Price = 100
Gender = "M"
Color = [ "Red", "Black" ]
ProductCategory = "Bike"
}
Item1
Item2
利用可能な型
・Scalar data types
Number, String, Binary
・Multi-valued types
Number Set, String Set, Binary Set
64KBまで
スキーマレス
- 9. Primary Key
□ Hash Type Primary Key
・1つの Attribute が Primary Key
・DynamoDB は Primary Key に対して Hash Index を作成
□ Hash and Range Type Primary Key
・2つの Attribute が Primary Key
1: Hash Primary Key
2: Range Primary Key
・DynamoDB は Hash Primary Key に対して Hash Index を作成
・DynamoDB は Range Primary Key に対して整列した Range Index を作成
Attribute 1
(Hash Primary Key)
Attribute 2 Attribute 3
Attribute 1
(Hash Primary Key)
Attribute 2
(Range Primary Key)
Attribute 3
Map<HashKey,Object>
Map<HashKey, SortedMap<RangeKey,Object>>
- 10. Primary Key(具体例)
□ サンプルデータ
Table Name Primary Key Type Hash Attribute Name Range Attribute Name
Forum ( Name, ... ) Hash Attribute Name: Name -
Thread (ForumName, Subject, ... ) Hash and Range Attribute Name: ForumName Attribute Name: Subject
Reply ( Id, ReplyDateTime, ... ) Hash and Range Attribute Name: Id Attribute Name: ReplyDateTime
Amazon DynamoDB
Amazon DynamoDB#DynamoDB Thread 1
2011-12-11 00:40:57
Amazon DynamoDB
DynamoDB Thread1
Amazon S3
Amazon DynamoDB
DynamoDB Thread2
Amazon S3
S3 Thread2
Amazon DynamoDB#DynamoDB Thread 1
2011-12-18 00:40:57
Amazon DynamoDB#DynamoDB Thread 1
2011-12-25 00:40:57
Amazon DynamoDB#DynamoDB Thread 2
2011-12-25 00:40:57
Amazon DynamoDB#DynamoDB Thread 2
2012-01-03 00:40:57
Forum Thread Reply
Hash Primary key
Range Primary key
Hash Primary key
Range Primary key
Hash Primary key
- 11. Primary Key(具体例)
□ Forum
Name (Primary Key) Other Attributes
"Amazon DynamoDB" {
Category="Amazon Web Services"
Threads=3
Messages=4
Views=1000
LastPostBy="User A"
LastPostDateTime= "2012-01-03T00:40:57.165Z"
}
"Amazon S3" {
Category="Amazon Web Services"
Threads=1
}
- 12. Primary Key(具体例)
□ Thread
Name (Primary Key) Other Attributes
ForumName = "Amazon DynamoDB"
Subject = "DynamoDB Thread 1"
{
Message = "DynamoDB thread 1 message text"
LastPostedBy = "User A"
Views = 0
Replies = 0
Answered = 0
Tags = [ "index", "primarykey", "table" ]
LastPostDateTime = "2012-01-03T00:40:57.165Z"
}
ForumName = "Amazon DynamoDB"
Subject = "DynamoDB Thread 2
{
Message = "DynamoDB thread 2 message text"
LastPostedBy = "User A"
Views = 0
Replies = 0
Answered = 0
Tags = [ "index", "primarykey", "rangekey" ]
LastPostDateTime = "2012-01-03T00:40:57.165Z"
}
ForumName = "Amazon S3"
Subject = "S3 Thread 1"
{
Message = "S3 Thread 1 message text"
LastPostedBy = "User A"
Views = 0
Replies = 0
Answered = 0
Tags = [ "largeobject", "multipart upload" ]
LastPostDateTime = "2012-01-03T00:40:57.165Z"
}
- 13. Primary Key(具体例)
□ Reply
Name (Primary Key) Other Attributes
Id = "Amazon DynamoDB#DynamoDB Thread 1"
ReplyDateTime = "2011-12-11T00:40:57.165Z
{
Message = "DynamoDB Thread 1 Reply 1 text"
PostedBy = "User A"
}
Id = "Amazon DynamoDB#DynamoDB Thread 1"
ReplyDateTime = "2011-12-18T00:40:57.165Z
{
Message = "DynamoDB Thread 1 Reply 1 text"
PostedBy = "User A"
}
Id = "Amazon DynamoDB#DynamoDB Thread 1"
ReplyDateTime = "2011-12-25T00:40:57.165Z
{
Message = "DynamoDB Thread 1 Reply 3 text"
PostedBy = "User B"
}
Id = "Amazon DynamoDB#DynamoDB Thread 2"
ReplyDateTime = "2011-12-25T00:40:57.165Z
{
Message = "DynamoDB Thread 2 Reply 1 text"
PostedBy = "User A"
}
Id = "Amazon DynamoDB#DynamoDB Thread 2"
ReplyDateTime = "2012-01-03T00:40:57.165Z
{
Message = "DynamoDB Thread 2 Reply 2"
PostedBy = "User A"
}
- 15. Local Secondary Indexes
□ LSI がないとき
□ LSI があるとき
Table Item1
Item2
Item N
プログラム
loop (items) {
//処理
}
Item2
・・・
Item9
必要な Item を抽出
するフィルタが必要
Table Item2
Item9
Query
Query
- 16. Provisioned Throughput
□ Unit とは
書き込みの場合
1 ユニット = 1KB の Item に対して 1 秒あたり 1 回の書き込みできる
読み込みの場合
1 ユニット = 4KB のItemに対して強い整合性のある読み込みを 1 秒あたり 1 回
できる ※結果整合性のある読み込みは 1 秒あたり 2 回できる
- 18. API
CREATETABLE
‒ テーブルを作成し、データアクセスに使用するプライマリインデックスを指定します。
UPDATETABLE
‒ 指定されたテーブルについて、 プロビジョニングされたスループット値を更新します。
DELETETABLE
‒ テーブルを削除します。
DESCRIBETABLES
‒ テーブルサイズ、ステータス、およびインデックス情報を返します。
LISTTABLES
‒ 現在のアカウントおよびエンドポイントに関連付けられたすべてのテーブルのリストを返します。
PUTITEM
‒ 新しい項目を作成するか、古い項目を(すべての属性を含め)新しい項目で置き換えます。指定したテーブルに同じプライ
マリキーを持つ項目が存在する場合、既存の項目は新しい項目に完全に置き換えられます。条件付き演算子を使用して、所定
の条件に一致する属性値を持つ項目のみを置き換えたり、その項目が存在しない場合にのみ新しい項目を挿入したりすること
もできます。
BATCHWRITEITEM
‒ 1回のトランザクションとしてではなく、1回のリクエストで、複数のテーブル間で複数の項目を挿入、置換、削除します。
PUT または DELETE で最大25項目のバッチをサポートし、合計リクエストサイズは最大1 MB です。
UPDATEITEM ‒ 既存の項目の属性を編集します。条件付き演算子を使用して、項目の属性値が所定の条件に一致する場合に
のみ更新を実行することもできます。
DELETEITEM
‒ プライマリキーを使用してテーブルから1つの項目を削除します。条件付き演算子を使用して、項目の属性値が所定の条件
に一致する場合にのみ項目を削除することもできます。
- 19. API
GETITEM
‒ GETITEM 演算は、プライマリキーに一致する項目の属性セットを返します。GETITEM 演算は、デフォルトでは、結果的
に整合性のある読み込みを提供します。ご利用のアプリケーションで結果的に整合性のある読み込みを使用できない場合は、
CONSISTENTREAD を使用します。
BATCHGETITEMS
‒ BATCHGETITEMS 演算は、複数の項目の属性を複数のテーブルから、それぞれのプライマリキーを使用して返します。1
回の応答のサイズ制限は 1 MB で、最大 100 個の項目を返します。強い整合性と結果整合性の両方をサポートします。
QUERY
‒ テーブルのプライマリキーを使用して、または、セカンダリインデックスからセカンダリインデックスキーを使用して、1
つ以上の項目を取得します。範囲キー値またはセカンダリインデックスキーに対して比較演算子を使用することで、クエリの
範囲を絞り込むことができます。強い整合性と結果整合性の両方をサポートします。応答1つあたりのサイズ上限は1 MBです。
SCAN
‒ テーブルに対して完全スキャンを実行し、1つ以上の項目と属性を取得します。返される項目は、1つ以上の属性に対して指
定したフィルタで制限されている場合があります。したがって、この API は、テーブルのプライマリキーではない属性に対し
て一時的なクエリを有効にするときに使用できます。ただし、これはインデックスを使用しない完全テーブルスキャンなので、
予測可能なパフォーマンスが必要なアプリケーションクエリには使用しないでください。スキャン API リクエストの結果
セットは結果的に整合性があります。スキャン API をインジケータと考えることができます。あるスキャン API リクエスト
のスキャン項目の合計サイズが 1 MB の上限を超えると、そのリクエストは終了し、取得された結果は(以降のオペレーショ
ンでスキャンを続行できるように)LASTEVALUATEDKEY と共に返されます。
デフォルトでは、スキャンオペレーションはデータを順次処理します。テーブルのスキャンを並列で行うことも可能です。ス
キャンオペレーションでは、そのスキャンをいくつのセグメントに分割するかを指定し、複数のセグメントを同時にスキャン
することができます。並列処理を使用したテーブルのスキャンの詳細については、並列スキャンのドキュメントを参照してく
ださい。
- 22. やること
□ 概説
□ Management Console から利用する
・Table の作成
・Throughput の変更
・Item の登録、取得、更新
□ Eclipse から利用する(Java)
・デモンストレーション
□ 手乗りDynamoDB
・デモンストレーション
- 40. やること
□ 概説
□ Management Console から利用する
・Table の作成
・Throughput の変更
・Item の登録、取得、更新
□ Eclipse から利用する(Java)
・デモンストレーション
□ 手乗りDynamoDB
・デモンストレーション