1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DynamoDBのカーディナリティが高いとは?

Posted at

はじめに

DynamoDBの勉強中、パーティションキーはカーディナリティの高いものを選択することが重要だよ、とAWS公式ドキュメントに書いてあったのを見ました。

いや、そもそもカーディナリティが高いって何?と前提から理解できていなかったので、
カーディナリティとは何なのかというところから調べました。
結果、カーディナリティについて理解できたので共有します。

想定読者

カーディナリティについてあまり分かっていない人

カーディナリティとは

カーディナリティとは、カラムに格納されるバリエーションの数を指します。
つまり、カーディナリティが高いほど、カラムには多くの異なる値が格納されていることを意味します。

カーディナリティが低い例・高い例

以下に示すような、フルーツの収穫テーブルがあったとします。

Harvest Date Fruit Name
2021/01/01 Apple
2021/01/02 Apple
2021/01/03 Apple
2021/01/04 Banana
2021/01/05 Banana
2021/01/06 Banana

例えば、フルーツ名をパーティションキーとした場合、
フルーツ名には、Apple・Bananaの2種類しかないので、バリエーションが無いですよね。
つまり、カーディナリティが低いと言えます。
逆に、収穫日をパーティションキーとした場合、
収穫日は2021/01/01 - 2021/01/06の6種類あるので、バリエーションがあります。
つまり、カーディナリティが高いと言えます。

カーディナリティが高いことによるメリット

カーディナリティが高いと、パフォーマンスが向上します。
これは、データの分散が均等に行われることによって、クエリの実行時にデータの検索範囲が狭まり、効率的な検索が可能となるためです。
例として、パーティションキーをフルーツ名とした時と
収穫日とした時の比較をしてみます。
パーティションキーがフルーツ名の場合、"Apple"で検索をすると3件取得できます。
それに対しパーティションキーが収穫日の場合、"2021/01/03"で検索すると1件取得できます。
こうして数値化してみると、カーディナリティの高い方が検索のヒット数が少なくなり、検索コストが下がる為、より効率的に検索出来ていることが分かります。

カーディナリティが低いとどうなるのか

パーティションキーのカーディナリティが低い場合、ホットパーティションになる可能性があります。
ホットパーティションとは、読み込みや書き込みなどリクエストが集中するパーティションのことで、アツいパーティションということです。
こうなった場合、パーティションの制限(3000RCU と 1000 WCU/秒)を超えるとスロットリングが発生するようになります。
また、全体のパフォーマンス低下にも繋がります。
なので、低カーディナリティは避けましょうということですね。

さいごに

カーディナリティについて大分理解出来ました。
だからタイムスタンプがパーティションキーになったりするんですね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?