1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DynamoDBとRDBMS

Last updated at Posted at 2019-10-04

#はじめに
学生アルバイトのsosonoです。
プロジェクトでAmazon DynamoDBを使用する予定になり、今まで使用していたRDBMS(PostgreSQL)との違いが気になったのでまとめてみました。

#NoSQLとRDBMS

DBMS
データベース管理システム。DBを構築するために必要なDB運用、管理のためのシステム、またそのソフトウェアのこと。

  • RDBMS

    リレーショナルデータベース管理システム。構造化クエリ言語(SQL)を使用する。有名どころはMySQLやPostgreSQL、SQLite。Rは関係という意味を持ち、データ=表の「関係モデル」が基礎。

  • NoSQL

    Not only SQLの略であり、NoSQLデータベースシステムとなる。例としてAmazon DynamoDBなど。キーと値のペア、ドキュメントストレージといった、データ管理のための「新しいモデル」が基礎になっている。RDBMSの弱点を補うような立ち位置。

比較

  • ワークロード

    • RDBMS
      • アドホッククエリ、データウェアハウス、オンライン分析処理、etc
    • DynamoDB
      • SNS、ゲーム、IoT関連、メディア共有、etc
      • 単純なデータ構造で、データ数が多いものに向いている
  • データモデル

    • RDBMS
      • 実装やパフォーマンスをあまり気にせず柔軟に設計できる。が、テーブル、列、行といった明確な構造(スキーマ)が必要。
    • DynamoDB
      • スキーマレス。テーブル毎に、PrimaryKeyが必要になる。JSONドキュメントを含む構造化データまたは半構造化データを管理可能。
  • データアクセス

    • RDBMS 
      • SQLを使用。テーブルを連結した複合的な検索も可能。柔軟に使えるが、比較的高コストで、トラフィック量によってはスケールがうまくいかない可能性もある。読み書きは遅い。
    • DynamoDB
      • SQLは使えない。AWSマネジメントコンソール、AWS CLIを使用してDB自体を操作。AWS SDKを活用すれば、PHP、JavaScript、Python、Ruby等からアクセスできるようになる。読み書きは速い。
  • パフォーマンス

    • RDBMS
      • 開発者、データベース管理者が別だったりと、パフォーマンス向上のためにはクエリやDBの構造を最適化する必要がある。
    • DynamoDB
      • パフォーマンスはハードウェアなどに依存する。マネージド型であるため、実装の詳細から離れ、堅牢な設計を比較的簡単に行える。
  • 拡張性

    • RDBMS
      • データ構造はあらかじめ定義されており、高コスト。 
    • DynamoDB
      • シンプルなデータ構造のため、自由に拡張できる。前提として、テーブルは少ない方が優れたものとされる、というのがある。

実際のコードで比較

  • RDBMS
    • 作成時に,テーブルの列、データ型全て、プライマリーキー等を定義する必要があった(ALTER TABLE使えば変更はできる)
    • 自分的には見慣れた記述方法です。

CREATE TABLE Music (
    Artist VARCHAR(20) NOT NULL,
    SongTitle VARCHAR(30) NOT NULL,
    AlbumTitle VARCHAR(25),
    Price FLOAT,
    Tags TEXT,
    PRIMARY KEY (Artist, SongTitle)    
);
  • DynamoDB
    • RDBMSとは全く違う感じの記述です。基本的にはキーと値から成っています。
    • KeySchema(属性)はプライマリーキーに使用、AttributeDefinitionsはKeySchema属性のデータ型と言ったように、基本的な考え方はRDBMSのそれと変わりません。


{
    TableName : "Music",
    KeySchema: [       
        { 
            AttributeName: "Artist", 
            KeyType: "HASH", 
        },
        { 
            AttributeName: "SongTitle", 
            KeyType: "RANGE" 
        }
    ],
    AttributeDefinitions: [
        { 
            AttributeName: "Artist", 
            AttributeType: "S" 
        },
        { 
            AttributeName: "SongTitle", 
            AttributeType: "S" 
        }
    ],
}

※RDBMSのコードと特に互換性はありません。

#展望

  • シンプルで初歩的なコードの紹介でしたが、大きな違いがありました。一例として、PHPでDBにアクセスする時でもRDBMSとNoSQLでは記述量などに大きな変化があります。また整理がついたらまとめていきます!!

[参考:AWS公式サイト]https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SQLtoNoSQL.CreateTable.html

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?