たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

AWS DynamoDB

f:id:tarepan5884:20180212220823p:plain

DynamoDB では、テーブル、項目、および属性が、操作するコアコンポーネントです。テーブルは項目の集合であり、各項目は属性の集合です。
DynamoDB コアコンポーネント - Amazon DynamoDB

Read

大きく分けて2つのRead方法がある。

  • パーティションキーに基づいて取得
    • ソートキーで絞り込みが可能
    • 代替キーによる場合もこれと同じ
    • queryはこれにあたる
  • 全件取得
    • 取得後、フィルターをして返り値とすることも可能
    • scan はこれにあたる

キーはitemのあるattributeとして設定する.
DynamoDB API - Amazon DynamoDB

DynamoDB は 2 種類の異なるプライマリキーをサポートします。
パーティションキー – パーティションキーという 1 つの属性で構成されたシンプルなプライマリキー。
...
パーティションとソートキー – 複合プライマリキーと呼ばれるこのキーのタイプは、2 つの属性で構成されます。最初の属性はパーティションキーであり、2 番目の属性はソートキーです。 DynamoDB コアコンポーネント - Amazon DynamoDB

パーティション

内部の仕組み
パーティションとデータ分散 - Amazon DynamoDB

クエリの柔軟性: セカンダリインデックス

DynamoDB はプライマリキーを使用してテーブルの各項目を一意に識別し、セカンダリインデックスを使用してクエリの柔軟性を高めます。
DynamoDB コアコンポーネント - Amazon DynamoDB

インデックスは高速化をもたらしてくれる
ただし更新コストが高くつきうるのでお気をつけて.

インデックスは代替のクエリパターンへのアクセスを付与し、クエリを高速化できます。
...
インデックスの作成は慎重に判断する必要があります。 テーブルに書き込みが発生するたびに、テーブルのインデックスはすべて、更新する必要があります。 大きなテーブルでの書き込み量が多い環境では、大量のシステムリソースを消費する可能性があります。
インデックス管理 - Amazon DynamoDB

スループットと費用

DynamoDBは割り当てスループット (処理速度) で料金がおおよそ決定する.
その計算方法がやや独特
docs.aws.amazon.com
docs.aws.amazon.com

キャパシティーユニットをいくつ割り当てるかで最大スループットが決まり、消費量はitemサイズで決まる.

Read

  • GetItem: itemサイズ (4KB単位で切り上げ)
  • Query: 取得itemサイズ合計 (4KB単位で切り上げ)
  • Scan: テーブル内itemサイズ合計 (4KB単位で切り上げ)

Scanはヤバい、でかいテーブルだとキャパシティを大量に消費してしまう.
1読み取りキャパシティーユニットは4KB/sなので、1キャパシティユニット == 小さい1操作 という感覚. scanはヤバい

GetItem – テーブルから単一の項目を読み取ります。GetItem が消費するキャパシティーユニットの数を決定するには、項目のサイズを次の 4 KB 境界まで切り上げます。...
たとえば、3.5 KB の項目を読み取ると、DynamoDB は項目サイズを 4 KB まで切り上げます。

Query - 同じパーティションキー値を持つ複数の項目を読み取ります。返されるすべての項目は単一の読み取りオペレーションとして扱われ、DynamoDB はすべての項目の合計サイズを計算し、次の 4 KB 境界に切り上げます。たとえば、クエリの結果、合計サイズが 40.8 KB になる 10 項目が返されるとします。DynamoDB はオペレーションの項目サイズを 44 KB まで切り上げます。クエリの結果、64 バイトの項目が 1,500 項目返されると、累積サイズは 96 KB になります。

Scan - テーブルのすべての項目を読み取ります。DynamoDB は、スキャンにより返される項目のサイズではなく、評価される項目のサイズを考慮します。
項目サイズおよびキャパシティーユニットの消費 - Amazon DynamoDB

良い資料

www.slideshare.net

docs.aws.amazon.com