「DynamoDBのグローバルセカンダリインデックスとローカルセカンダリインデックスの違いが分からない…」
「2つのセカンダリインデックスの特徴について知りたい…」
DynamoDBには、グローバルセカンダリインデックス(GSI)とローカルセカンダリインデックス(LSI)がありますが、AWS初心者にとっては、「名前だけ言われても何のことだかさっぱり分からん!」って感じですよね…。
そこでこの記事では、普段仕事でDynamoDBをよく使う私が、DynamoDBの2種類のインデックスについて3つの重要な違いと共に紹介していきます!
AWS初心者にも分かりやすく書いているので、しっかりついてきて下さい!
具体的に3つの違いとは…
1. インデックスを作成できるタイミングと上限
2. キャパシティユニット
3. 結果整合性、強い整合性
のことです。
この時点では、「よく分からない…」という用語も記事を読み終えた後には分かるようになるはずです。
それでは早速、グローバルセカンダリインデックスとローカルセカンダリインデックスについて紹介していきます!
DynamoDB2種類のインデックス
前述した通り、DynamoDBには2種類のインデックスがあります。
1. グローバルセカンダリインデックス(GSI)
2. ローカルセカンダリインデックス(LSI)
ここでは、2種類のインデックスの違いについて話す前に、それぞれどんな特徴をもったインデックスなのかについて紹介していきます。
この2種類のインデックスを使うことで、パーティションキーとソートキーでは絞り込みが難しいデータを効率よく取得することができるようになります。
また、インデックスの理解をするためには、DynamoDBのキーについて知っておく必要があります。
「DynamoDBのキーって何?」と思った方は、以下の記事を参考にし、キーについて理解を深めてから読み進めて下さい!
グローバルセカンダリインデックス(GSI)
グローバルセカンダリインデックスとは、DynamoDBのパーティションキーとソートキーとは別で、プライマリーキーを作成できる機能のことです。
ローカルセカンダリインデックス(LSI)
一方、ローカルセカンダリインデックスとは、DynamoDBのパーティションキーはそのままで、新しいソートキーをプライマリーキーとしてセットできる機能のことです。
GSIとLSIの3つの違い
前述したように、GSIとLSIには以下の3つの違いがあります。
1. インデックスを作成できるタイミングと上限
2. キャパシティユニット
3. 結果整合性、強い整合性
ここでは、GSIとLSIの3つの違いについて1つずつ紹介していきます。
インデックスを作成できるタイミングと上限
1つ目の違いとして、「インデックスを作成できるタイミングと上限」が挙げられます。
GSIは、いつでも作成することができ、作成上限は1つのテーブルにつき20個までとなっています。
またLSIは、テーブル作成時のみ作成可能で、作成上限は1つのテーブルにつき5個までとなっています。
キャパシティユニット
2つ目の違いとして、「キャパシティーユニット」が挙げられます。
違いを説明するまえにキャパシティユニットについて少し紹介していきます。
キャパシティユニットには、
1. ライトキャパシティユニット(WCU、書き込みできる量)
2. リードキャオアシティ(RCU、読み込みできる量)
の2種類存在します。
「1キャパシティユニット = 1秒間に1KB以下のデータの書き込み or 読み込みができる」ことを指します。例えば、2.5KBのデータを書き込みが必要な場合には、3ライトキャパシティユニットが必要です。
また、キャパシティユニットには「2種類のキャパシティモード」が存在します。
1. オンデマンドキャパシティモード
2. プロビジョンドキャパシティモード
オンデマンドキャパシティモードとは、読み書きの量に応じてキャパシティユニットが自動的に増減します(オートスケーリング)。
スパイク(急なアクセス増加)が発生する場合、オンデマンドキャパシティモードが有効です。
一方プロビジョンドキャパシティモードとは、予めキャパシティユニットの容量を決めておきます。
読み書き量が予測できる場合、コスト削減に繋がるのでプロビジョンドキャパシティモードが有効です。
キャパシティユニットについて理解できたところで、GSIとLSIの違いについて説明していきます。
GSIは、GSIのキャパシティユニットが消費されます。
対してLSIは、LSIを使用しているテーブルのキャパシティユニットが消費されます。
結果整合性、強い整合性
3つ目の違いとして、「結果整合性、強い整合性」が挙げられます。
結果整合性とは、テーブル読み込み時のスループットが最大限発揮されるという利点がありますが、最新の書き込みデータが反映されていない場合があります。これにより、データに矛盾が生じる可能性があります。
強い整合性とは、最新の書き込み結果を確認してからデータを読み込むためデータに矛盾が生じません。
GSIでは、結果整合性のみサポートしています。
一方LSIでは、結果整合性と強い整合性共にサポートしています。
さいごに
今回は、「DynamoDBの2種類のインデックスと重要な3の違い」について紹介してきました。
GSIとLSIを理解して、DynamoDBへの理解をさらに深めることはできたでしょうか?
また私のサイトでは、他にもAWSに関する記事を発信しております。
興味のある方は是非、こちらの記事も読んでみて下さい!
コメント