データ基盤

DynamoDBとは|置き場所を8個から512個にしても、いちばん多い場所は15.98%から5.10%までしか下がらなかった

鍵はどう決まるのか分ければ均されるのか集中すると何に当たるのか

鍵5万種を混ぜて置き場所に振りました。8個に分けると、いちばん多い場所は15.98%です。

512個に増やしても5.10%までしか下がりません。均等なら0.20%のはずで、26.1倍の開きです。

この記事の要点

  • 8個で15.98%
  • 512個でも5.10%
  • 均等なら0.20%
  • 比は26.1倍

置き場所を決める鍵を、最初に決めきる

あとから条件を足して探す形ではありません。鍵の設計が、その後の性能をほぼ決めます。

DynamoDBの鍵には2つの形があります。ドキュメントはこう定めています。

DynamoDBの表の各項目を一意に定める主鍵は、単純な形(置き場所を決める鍵のみ)か、複合の形(置き場所を決める鍵と並べ替えの鍵の組み合わせ)のいずれかであるという記述です。

重要なのは前半です。置き場所を決める鍵が、データの居場所を決めます

決めきるということ

  1. 取り出す道筋が鍵に固定される。条件で探す形ではない
  2. 置き場所が鍵から決まる。あとで動かせない
  3. 並べ替えは同じ置き場所の中だけ。全体の並べ替えではない
  4. 読み方が変わると、別の索引を足すことになる

1番目が、条件で探せる仕組みとの大きな違いです。PostgreSQLの記事で扱った「あとから索引を足す」形は取れません。

だから読み方を先に洗い出すことになります。読み方が決まらないうちは、鍵も決まりません。

求められている状態

ドキュメントは設計の目標も示しています。表とその二次索引にわたって、すべての置き場所を決める鍵で均一な活動になるよう、応用を設計すべきであるという記述です。

「均一な活動」がどこまで実現できるかを、次の節で数えます。

出典AWS ドキュメント「Best practices for designing and using partition keys effectively in DynamoDB」2026-08-18 確認
The primary key that uniquely identifies each item in an Amazon DynamoDB table can be simple (a partition key only) or composite (a partition key combined with a sort key).
原文AWS ドキュメント「Best practices for designing and using partition keys effectively in DynamoDB」 この内容の有効期限2027-02-18

置き場所を8個から512個にしても、いちばん多い場所は5.10%までしか下がらない

混ぜて振り分けても、同じ鍵は同じ場所へ行きます。鍵そのものの偏りは消えません。

DynamoDBのドキュメントは均一な活動を勧めています。実際にどこまで均されるかを数えました。

鍵5万種を50万回引きます。鍵は混ぜてから置き場所に振り分けますので、鍵の並びによる偏りは消えています。

置き場所の数を変える

text
鍵 50,000種・引く回数 500,000回
鍵を混ぜて置き場所を決める。置き場所の数を変えて、いちばん多い置き場所の割合を見る

置き場所の数  均等なら  よく引かれる鍵がある場合  均される場合  最大と均等の比
8個                12.50%                  15.98%        12.60%            1.3倍
32個                3.13%                   7.46%         3.18%            2.4倍
128個               0.78%                   5.52%         0.82%            7.1倍
512個               0.20%                   5.10%         0.22%           26.1倍

右から2列目を見てください。引かれ方が均される場合は、ほぼ均等な値に収まっています。

その左が本題です。よく引かれる鍵がある場合、512個に分けても5.10%で止まります。

分けるほど比が広がる

右端の列は逆を向いています。8個では1.3倍だった比が、512個では26.1倍になります。

均等の値だけが下がるためです。いちばん多い場所は、いちばん多い鍵の分だけ下がりません

つまり分けても直りません。混ぜてから振り分けているので、並びの問題ではないことも分かります。

直すには鍵そのものを分けます。1つの鍵に接尾辞を足して複数に散らすやり方で、読むときは散らした分を合わせます。

均される場合はほぼ均等。偏りがある場合だけ下がらない。

よく引かれる鍵がある均される8個に分ける32個に分ける128個に分ける512個に分ける均等どおり26.1倍鍵5万種・50万回での実測。右の列は分けた数によらず均等どおりに収まる。
図1 ── 置き場所の数と、いちばん多い場所の偏り
出典AWS ドキュメント「Best practices for designing and using partition keys effectively in DynamoDB」2026-08-18 確認
You should design your application for uniform activity across all partition keys in the table and its secondary indexes.
原文AWS ドキュメント「Best practices for designing and using partition keys effectively in DynamoDB」 この内容の有効期限2027-02-18

上限は表ではなく、置き場所ごとに掛かる

全体に余裕があっても、1つの置き場所が上限に当たれば、そこだけが詰まります。

DynamoDBの上限は、置き場所ごとに定められています。ドキュメントは数値を明記しています。

DynamoDBの表のすべての置き場所は、毎秒3000の読みの単位と、毎秒1000の書きの単位という最大の能力を届けるよう設計されているという記述です。

前の計測と合わせると、集中が上限にどう効くかが見えます。

全体の余裕と個別の詰まり

512個に分けた場合、全体の上限は読みで毎秒153万です。ところが1つの場所は3000で頭打ちになります。

いちばん多い場所が5.10%を受けるなら、全体が毎秒5万9千に届いた時点で、その場所が3000に当たります。全体の上限の3.8%です。

均される場合は0.22%なので、全体が毎秒136万まで伸びてから当たります。23倍の違いです。

確かめる順序

全体の使用量だけを見ていると、この詰まりは見えません。置き場所ごとの偏りを先に数えることになります。

似た構図は、要求の集中を扱う場面で繰り返し出てきます。平均が隠す上位の話はMongoDBの記事でも数えました。

偏りを先に数えてから、置き場所の数を決める。

充足 2 / 4鍵ごとの引かれる回数を数えているいちばん多い鍵の割合が、置き場所の上限に当たる時期を決める読み方を先に洗い出している取り出す道筋が鍵に固定され、あとから条件を足せない置き場所を増やせば均されると考えている512個に分けてもいちばん多い場所は5.10%までしか下がらない全体の使用量だけを見ている全体の上限の3.8%で、1つの置き場所が先に詰まる鍵5万種・50万回での実測にもとづく。偏りが強い鍵は、鍵そのものを分けて散らす。
図2 ── 鍵を決める前に確かめること
余談 この計測での注意

引かれ方の偏りは式で作ったもので、実在の分布ではありません。偏りが弱ければ均される側の列に近づきます。混ぜる関数も簡単なものを使っており、実際の実装とは違います。上限に当たる時期の計算は、ドキュメントの3000という値と、この計測の割合を掛け合わせた見積もりです。ここで見せているのは、分けても消えない偏りがあること、上限が置き場所ごとに掛かることの2つです。

出典AWS ドキュメント「Best practices for designing and using partition keys effectively in DynamoDB」2026-08-18 確認
Every partition in a DynamoDB table is designed to deliver a maximum capacity of 3,000 read units per second and 1,000 write units per second.
原文AWS ドキュメント「Best practices for designing and using partition keys effectively in DynamoDB」 この内容の有効期限2027-02-18

よくある質問

DynamoDBの鍵はどう決まりますか
置き場所を決める鍵だけの単純な形か、それに並べ替えの鍵を組み合わせた形かを選びます。
置き場所を増やせば均されますか
均されません。この計測では8個で15.98%、512個でも5.10%までしか下がりませんでした。
なぜ均されないのですか
特定の鍵そのものがよく引かれるためです。混ぜて振り分けても、同じ鍵は同じ場所に行きます。
集中すると何が起きますか
置き場所ごとの上限に当たります。1つの置き場所は毎秒3000の読みと1000の書きが上限です。

まとめ

  • 鍵から置き場所が決まる
  • 分けても集中は残る
  • 分けるほど比は広がる
  • 上限は置き場所ごと

今日から始められること

  1. 鍵ごとの引かれる回数を数える
  2. いちばん多い鍵の割合を出す
  3. 置き場所あたりの上限と比べる
  4. その鍵を分ける方法を検討する

実務で組んだDynamoDBのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る