DynamoDB は NoSQL データベースですか?
はい。DynamoDB は NoSQL データベースです。非リレーショナルでフルマネージドな、キーバリューかつドキュメントのストアです。固定スキーマのテーブルにある行ではなくスキーマレスなアイテムを保持し、SQL の結合やアドホッククエリと引き換えに、予測可能な一桁ミリ秒の性能と、事実上あらゆるサイズへの水平スケーリングを手にします。
どんな種類の NoSQL か
DynamoDB はキーバリューとドキュメントの両方のデータモデルに対応しています。すべてのアイテムはプライマリキーで指し示され、属性はマップやリストとして最大 32 階層までネストできます。これがモデルのドキュメント側です。
SQL との違い
- 固定スキーマがない — 事前に定義するのはプライマリキーだけで、他の属性はアイテムごとに変わります。
- 結合がない — 代わりに非正規化し、アクセスパターンを中心にモデル化します。
- 予測可能な性能 — 読み取りはパーティションキーを狙うので、データが増えてもレイテンシは横ばいです。
エンジンは JOIN をどう扱うか
PartiQL は DynamoDB を SQL のような見た目にするので、境界は見落としやすくなります。AWS が文書化した SELECT の構文がその文法のすべてであり、そこに JOIN 句はありません。
SELECT {{expression}} [, ...]
FROM {{table}}[.{{index}}]
[ WHERE {{condition}} ] [ [ORDER BY {{key}} [DESC|ASC] , ...]それでも送ってみると、パーサーは 2 つ目のテーブルで止まります。
await client.send(
new ExecuteStatementCommand({
Statement: `SELECT o.pk FROM "orders" o JOIN "customers" c ON o.pk = c.pk`
})
);実際の出力:
ValidationException: Only select from a single table or index is supported.
HTTP 400拒否はパース時、データが 1 バイトも読まれる前に起きます。だからインデックスをいくら設計しても結合には辿り着けません。NoSQL ストアにおいて、結合はアプリケーションの仕事です。
これは、どのクライアントが何を正直に提供できるかの境界でもあります。DynoTable の SQL Workbench は INNER JOIN、LEFT JOIN、GROUP BY、そして COUNT/SUM/AVG/MIN/MAX を受け付けます。
これらをネイティブな Query と Scan の呼び出しにコンパイルし、結合と集計は手元のマシンで行います。DynamoDB が見るのは、あくまで単一テーブルの読み取りだけです。
向く場面
DynamoDB は OLTP ワークロードのために作られています。大量で、既知のポイント読み取り・範囲読み取りと書き込みです。重い分析は、エクスポートで供給される別のカラムナストアに任せるべきです。
本番で今も効いてくる NoSQL の制限
「NoSQL」はアクセスモデルを表す言葉であって、制約がなくなるという意味ではありません。DynamoDB には今も、アイテムあたり 400 KB、TransactWriteItems あたり 25 アクション、1 トランザクションあたり読み取りまたは書き込み 100 アクションという上限があります。ネストした文書は 32 段 まで深くできます。GSI は名前を挙げた属性しか射影しません。頼れる隠れたスキーマは存在しません。
こうした制限が効いてくるのは、クエリ時に結合で切り抜けることができないからです。スパースインデックス、非正規化した属性、シングルテーブルのキー設計といった形で、あらかじめ制限を織り込んでモデリングし、そのうえでパーティション単位に読みます。クエリビルダーは、フィルターを DynamoDB が実際に実行する Query または Scan リクエストに変換します。
DynoTable では: リレーショナルな問いが正当な場面では、SQL Workbench が JOIN と GROUP BY をあなたのマシン上でネイティブの Query と Scan にコンパイルします — DynamoDB 側から見えるのは、あくまでシングルテーブルの読み取りです。対応している文法と正直な限界については SQL Workbench を参照してください。
さらに詳しく
DynamoDB を使うべき場面と、DynamoDB でのデータモデリング方法でのデータの形の作り方を参照してください。NoSQL のテーブルを参照し、DynamoDB のアクセスパターンのルール内で SQL を実行するには、DynoTable をダウンロードしてください。
参考資料
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
- Core components of Amazon DynamoDB — Amazon DynamoDB Developer Guide
- PartiQL select statements for DynamoDB — Amazon DynamoDB Developer Guide
- Fast NoSQL Key-Value Database — Amazon DynamoDB — AWS
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。PartiQL の SELECT 文法は 2026-07-28 に再確認しました。
2026-07-28 に、Node v24.18.0 上の @aws-sdk/client-dynamodb 3.1095.0 で DynamoDB Local 3.3.0 に対して再現しました。上記の ValidationException はエンジンの出力そのままです。