プライマリキーを使用して項目を読み込むときの相違点
データベースの一般的なアクセスパターンの 1 つは、テーブルから単一項目を読み取ることです。目的の項目のプライマリキーを指定する必要があります。
SQL にプライマリキーを使用して項目を読み込む
SQL では、SELECT
ステートメントを使用して、テーブルからデータを取得します。結果の 1 つ以上の列 (*
オペレーター を使用すれば、すべて) をリクエストできます。WHERE
句は返る行を判別します。
以下は、Music テーブルから単一の行を取得するための SELECT
ステートメントです。WHERE
句はプライマリキー値を指定します。
SELECT *
FROM Music
WHERE Artist='No One You Know' AND SongTitle = 'Call Me Today'
列のサブセットのみを取得するようにこのクエリを変更できます。
SELECT AlbumTitle, Year, Price
FROM Music
WHERE Artist='No One You Know' AND SongTitle = 'Call Me Today'
このテーブルのプライマリキーが、Artist および SongTitle で構成されていることに注意してください。
DynamoDB でプライマリキーを使用して項目を読み込む
Amazon DynamoDB では、DynamoDB API または PartiQL (SQL 互換のクエリ言語) を使用して、テーブルから項目を読み込むことができます。
- DynamoDB API
-
DynamoDB API では、PutItem
オペレーションを使用して、テーブルに項目を追加します。
DynamoDB は、プライマリキーにより項目を取得するための GetItem
オペレーションを提供します。GetItem
は、項目の物理的な場所への直接アクセスを提供するため非常に効率的です。(詳しくは、DynamoDB におけるパーティションとデータ分散 を参照してください)。
デフォルトでは、GetItem
は、すべての属性を含む項目全体を返します。
{
TableName: "Music",
Key: {
"Artist": "No One You Know",
"SongTitle": "Call Me Today"
}
}
一部の属性のみが返されるように、ProjectionExpression
パラメータを追加できます。
{
TableName: "Music",
Key: {
"Artist": "No One You Know",
"SongTitle": "Call Me Today"
},
"ProjectionExpression": "AlbumTitle, Year, Price"
}
このテーブルのプライマリキーが、Artist および SongTitle で構成されていることに注意してください。
DynamoDB GetItem
オペレーションは非常に効率的です。プライマリキー値を使用して、該当する項目の正確な格納場所を特定し、そこから直接取得します。SQL SELECT
ステートメントは、プライマリキー値によって項目を取得する場合、同様に効率的です。
SQL SELECT
ステートメントは、さまざまな種類のクエリとテーブルスキャンをサポートしています。DynamoDB は、テーブルのクエリにおける相違点 および テーブルのスキャンにおける相違点 で説明されている Query
および Scan
オペレーションと同様の機能を提供します。
SQL SELECT
ステートメントは、テーブルの結合を実行でき、同時に複数のテーブルからデータを取得できます。データベーステーブルが正規化され、テーブル間の関係が明確である場合、結合は最も効果的です。ただし、1 つの SELECT
ステートメントであまりに多くのテーブルを結合すると、アプリケーションパフォーマンスが影響を受けます。データベースレプリケーション、マテリアライズドビュー、またはクエリの書き換えを使用して、このような問題を回避できます。
DynamoDB は、非リレーショナルデータベースのため、テーブルの結合はサポートされません。リレーショナルデータベースから既存のアプリケーションを DynamoDB に移行する場合、結合の必要を排除するためデータモデルを非正規化する必要があります。
- PartiQL for DynamoDB
-
PartiQL では、PartiQL Select
ステートメントを利用する ExecuteStatement
オペレーションを使用して、テーブルから項目を読みます。
SELECT AlbumTitle, Year, Price
FROM Music
WHERE Artist='No One You Know' AND SongTitle = 'Call Me Today'
このテーブルのプライマリキーが、Artist および SongTitle で構成されていることに注意してください。
選択 PartiQL ステートメントは、DynamoDB テーブルにクエリやスキャンを実行する場合にも使用できます
Select
と ExecuteStatement
を使用したコード例については、DynamoDB 用の PartiQL select ステートメント を参照してください。