本記事はAmazon DynamoDBのDeveloper Guideの中で述べられているUnderstand Partition Behaviorの翻訳です。
なお、本投稿は私が個人的に訳したものであり所属する企業や団体における公式見解ならびに公式発表ではございません。
パーティションの挙動を理解する
DynamoDBはパーティショニングを自動的に行います。テーブルのサイズが大きくなれば、新しくパーティションを追加します。作成されたテーブルのパーティション数について、スケールおよびアクセスパターンを元に、ご自身でお見積もりいただくことができます。これによってアプリケーションにとってベストなテーブルデザインを行う事が可能になります。
パーティション数は基本的にテーブルのストレージサイズおよび provisioned throughput によって決まります。
テーブルサイズからのパーティション数算出
・ numPartitionstableSize = tableSizeInBytes / 10 GB
テーブルのサイズはパーティション数決定における1つの要素になりますが、他の要素としては provisioned throughput 要件が挙げられます。DynamoDBでは各パーティションにつき、MAXで 3000 read capacity units もしくは 1000 write capacity units を割り当てる事が可能です。
provisioned read および write throughputからのパーティション数算出
・ numPartitionsthroughput = ( readCapacityUnits / 3000 ) + ( writeCapacityUnits / 1000 )
例えば、 1000 read capacity units および 500 write capacity units を設定した場合、numPartitionsthroughputは:
( 1000 / 3000 ) + ( 500 / 1000 ) = 0.8333
となります。1つのパーティションでテーブルに設定された provisioned throughput をまかなうことが可能です。
但し、もし1000 read capacity units および 1000 write capacity unitsという設定を行った場合、numPartitionsthroughput は1パーティションのキャパシティを超えます:
( 1000 / 3000 ) + ( 1000 / 1000 ) = 1.333
この場合、2つのパーティションが必要になります。それぞれにおいて 500 read capacity units および 500 write capacity units が処理されます。
DynamoDBによってアロケートされるパーティション数は、実際のテーブルサイズもしくは設定した provisioned throughput よりも大きくなります:
DynamoDBによってアロケートされるパーティション数
・ numPartitionstotal = MAX ( numPartitionstableSize | numPartitionsthroughput )
1つのパーティションは約10GBのデータを保持します。テーブルのサイズが10GBを超えると、DynamoDBはパーティションを追加してデータを配置します。それに応じてテーブルのreadおよびwriteキャパシティも分配します。つまり、テーブルのデータサイズが成長するにつれて、各パーティションの provisioned throughput は低くなっていきます。
テーブルのサイズが成長していき500GBになった場合、パーティション数はおおよそ50程度になります。
500 GB / 10 GB = 50 partitions
ここで 100,000 read capacity units をテーブルに設定した場合、各パーティションあたりのread capacityは以下のようになります:
100,000 read capacity units / 50 partitions = 2000 read capacity units per partition
Note
将来的にこれらのパーティショニングに関する仕様は変更される可能性があります。