DynamoDB VS RDB:アプリケーション開発においてどちらが最適か?

DynamoDB VS RDB:アプリケーション開発においてどちらが最適か?

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

本記事では、アプリケーション開発において、DynamoDBとRDBのどちらが最適かを検討します。Amazon Web Services(AWS)のサービスであるDynamoDBと、リレーショナルデータベース(RDB)を比較し、どちらがアプリケーション開発に最適なのかを考察します。

はじめに

AWSのサービスであるDynamoDBと、リレーショナルデータベース(RDB)は、アプリケーション開発において大きく異なる性質を持つサービスです。DynamoDBは、NoSQLデータベースとして、高速な読み書きを実現するために設計されています。一方、RDBは、SQLを使用して、データの整合性を確保するために設計されています。

本記事では、DynamoDBとRDBのどちらがアプリケーション開発に最適なのかを検討します。また、サンプルプログラムを使用して、実際にどちらのサービスが最適かを検証します。

DynamoDBとは

DynamoDBは、Amazon Web Services(AWS)が提供するNoSQLデータベースです。NoSQLデータベースとは、リレーショナルデータベースとは異なり、スキーマを定義せずに、データを登録できるデータベースです。

DynamoDBは、高速な読み書きを実現するために、複数のサーバーでデータを分散して保存します。また、複数のサーバーでデータを分散して保存することで、高可用性を実現しています。

RDBとは

リレーショナルデータベース(RDB)は、SQLを使用してデータを管理するデータベースです。RDBでは、データをテーブルとして定義し、テーブル間の関係を定義することで、データの整合性を確保します。RDBは、データの整合性を確保するために、原則データを一つのサーバーに保存します。(RDSのレプリケーション機能によって分散保存可能)

また、データを一つのサーバーに保存することで、DynamoDBのような結果整合性ではなく、強い整合性によるデータの読み書きを実現しています。

DynamoDBとRDBの比較

DynamoDBとRDBは、アプリケーション開発において大きく異なる性質を持つサービスです。それぞれの特徴を比較してみましょう。

項目DynamoDBRDB備考
データ構造NoSQLのため変更しやすいSQLのため変更しにくい、マイグレーション必須
データ保存複数のサーバーで保持一つのサーバーで保持RDBはRDSの設定でレプリケーションすれば複数のサーバーでバックアップ可能です
高速性中長期的にずっと高速レコード数に比例して低速化DynamoDBは適切なインデックス設計を行えば中長期的に高速です
高可用性デフォルトで高い可用性インフラの設計次第で高可用性RDBは高可用性のためにインフラ設計を要します
トランザクション
データ整合性
コスト

DynamoDBは、NoSQLデータベースとして、高速な読み書きを実現するために設計されています。一方、RDBは、SQLを使用して、データの整合性を確保するために設計されています。

ソースコードの比較

以下のサンプルプログラムでは、DynamoDBとRDBのどちらがアプリケーション開発に最適なのかを検証します。

DynamoDBのデータ保存の例

以下のサンプルプログラムでは、DynamoDBのPutItemオペレーションを使用してデータを保存します。

// インポート
import { DynamoDB } from 'aws-sdk';

// DynamoDBクライアントの作成
const dynamoDB = new DynamoDB.DocumentClient();

// テーブル名
const tableName = 'MyTable';

// データを保存する関数
const saveData = async (data: any) => {
  // 保存用のパラメータを作成
  const params = {
    TableName: tableName,
    Item: data
  };

  // データを保存
  await dynamoDB.put(params).promise();
};

RDB

以下のサンプルプログラムでは、SQL文を使用してデータを保存します。

// インポート
import { Pool } from 'pg';

// データベース接続情報
const connectionString = 'postgresql://user:password@host:port/database';

// プールの作成
const pool = new Pool({
  connectionString: connectionString
});

// データを保存する関数
const saveData = async (data: any) => {
  // 保存用のSQL文を作成
  const sql = `
    INSERT INTO my_table (
      key1,
      key2,
      key3
    ) VALUES (
      $1,
      $2,
      $3
    )
  `;

  // データを保存
  await pool.query(sql, [data.key1, data.key2, data.key3]);
};

まとめ

本記事では、DynamoDBとRDBのどちらがアプリケーション開発に最適なのかを比較しました。DynamoDBは、NoSQLデータベースとして、高速な読み書きを実現するために設計されています。一方、RDBは、SQLを使用して、データの整合性を確保するために設計されています。

DynamoDBを使用すると、高速な読み書きを実現できますが、データの整合性を確保することができません。一方、RDBを使用すると、データの整合性を確保できますが、高速な読み書きが中長期的に実現することが難しいです。

金融等の高い整合性/データに対する堅牢性を求められる場合はRDBの有利ですが、toC向けのアプリケーションやゲーム、スタートアップ開発ではDynamoDBに軍配があがるでしょう。

サーバーレス開発低コストなAWS開発内製化はお気軽にお問い合わせください。