開発に不可欠なデータベースを理解するには、基本的な概念から知っておく必要があります。 今日は、非開発者でも理解しやすいデータベースの概念を紹介し、RDBMSと非関係型データベースであるNoSQLとの違い、そしてそれぞれどのような状況で使用すべきかについて調べていきます。
データベース(Database、DB)とは何ですか? データベースは簡単に言うとデータの集まりです。 DBにはさまざまなタイプが存在します。階層型(Hierarchical)、メッシュ(Network)、関係(Relational)、オブジェクト指向(Object-Oriented)、オブジェクト関係(Object-Relational)などがあります。
階層型DB(Hierarchical DB)は、最初に登場したDBの概念です。ツリー(tree) 形式で構成されているため、初めて構成しておくとこれを変更するのが難しく、また別のデータを探すのが非効率的であるため、今は使用していません。
メッシュDB(Network DB)は、階層型DBの問題を改善するために登場しました。 階層型とは異なってデータ同士もつながる柔軟な構造ですが、プログラマーがすべての構造を理解した上でプログラムの作成が可能であるというデメリットがあるため、階層型と同様に今はほとんど使用していません。
関係DB(Relational DB)は略してRDBとも呼ばれ、現在ほとんどのDBが関係型DBの形で使用されています。 一般的な関係DB(RDB)は、テーブル、行、列の情報を構造化する方法です。RDBは、テーブル(table)と呼ばれる最小単位で構成され、テーブルは1つ以上の列(column)と行(row)で構成されています。すべてのデータは、処理およびデータ照会を効率的に実行するために、一連の表の行と列として保管されます。
関係DBには、テーブルを結合して情報間の関係またはリンクを設定する機能があり、複数のデータポイント間の関係を簡単に理解し、情報を取得できます。
DBと共に多く及ばれているDBMSは、Database Management Systemの略でデータベースを管理および運営するソフトウェアです。さまざまなデータを格納するデータベースは、複数のユーザーまたはアプリケーションにデータを共有し、同時にアクセスできる必要があります。このように同時にアクセスできるようにすることがDBMSの役割です。代表的な関係型DBMSには、MySQL、Oracle、MariaDB、PostgreSQLなどがあります。
関係型DBは、固定された行(row)と列(column)で構成されるテーブルにデータを格納します。各列には1つの属性に関する情報が格納され、行には各列のデータ型に合ったデータが格納されます。
関係型DBには2つの重要な特徴があります。データが定義されたデータスキーマに従ってテーブルに格納されることと、データが関係を介して複数のテーブルに分散されることです。少し簡単に言えば、テーブルの構造やデータ型などを事前に定義しなければならず、テーブルに定義された内容に適した形のデータだけを挿入できるのです。したがって、データを正確に入力した場合は、非常に簡単に使用できます。
NoSQLは非関係型DBで、SQLつまり関係型DBを除外し残りのタイプを指します。非関係型DBを称するときは、NoSQL(またはNoSQL DataBase)と呼びます。最近、Webアプリケーションがより普遍化で複雑になり、NoSQL DataBaseの人気が高まりました。
NoSQLデータベースはテーブル形式ではなく、関係型テーブルとは異なる方法でデータを格納します。データのケースによりさまざまな種類があり、主な種類には文書、キー値、ワイドカラム、グラフなどがあります。NoSQLといって必ずしもスキーマがないわけではありません。柔軟なスキーマを提供し、大量のデータと高いユーザー負荷でも簡単に拡張できるという点が大きなメリットです。また、データを読み込む時、スキーマに従ってデータが読み込まれます。
RDBMSのメリットRDBMSのデメリット
① スキーマが明確に定義されています。
② データの整合性を確保する。
③ 各データを重複せずに一度だけ保存します。
RDBMSのデメリット
① 柔軟性が低いため、データスキーマを事前に計画する必要があるため、今後の修正は困難です。
② 関係を結んでいるので、結合文が多い複雑なクエリが作れる。
③ 概して垂直方向の拡張のみが可能です。
① スキーマが明確に定義されています。
② データの整合性を確保する。
③ 各データを重複せずに一度だけ保存します。
① 柔軟性が低いため、データスキーマを事前に計画する必要があるため、今後の修正は困難です。
② 関係を結んでいるので、結合文が多い複雑なクエリが作れる。
③ 概して垂直方向の拡張のみが可能です。
RDBMSの場合、データはSQL言語を介してテーブルに格納されます。事前に作成されたスキーマに基づいて定義された形式に合わせてデータを保存する必要があります。
NoSQLの場合は、key-value、document、wide-column、graphなどの方法でデータを保存します。
スキーマは、データベース(Database)全体または一部の論理構造を表すもので、データベース内のデータがどの構造に格納されるかを示します。
RDBMSを使用するには固定スキーマが必要です。処理するデータ属性ごとに列に関する情報をあらかじめ決めておけば、データ処理が可能です。スキーマは後で変更できますが、データベース全体を変更したりオフラインにする必要があるため、最初に慎重にスキーマを定義する必要があります。
NoSQLでは、リレーショナルデータベースと比較して柔軟にスキーマの型を管理できます。行を追加するとすぐに新しい列を追加でき、個々の属性に対してすべての列のデータを必ず入力する必要はありません。
クエリは、データベースに関する情報を要求する行為です。SQLベースのリレーショナルデータベースは、テーブルの形式とテーブル間の関係に合わせてデータを要求する必要があります。要求方法が決まっているため、SQL言語などの構造化クエリ言語を使用することです。
NoSQLのクエリはデータグループ自体を検索することに焦点を当てているため、構造化されていないクエリ言語でもデータを要求できます。これをUnQLとも呼びます。
SQLベースのリレーショナルデータベースは垂直方向に拡張され、高メモリとCPUを使用します。 データベースが構築されたハードウェアのパフォーマンスを大幅に利用するため、高価な方であり、複数のサーバーにわたってデータベースの関係を定義できますが、非常に複雑で時間がかかることが欠点です。
NoSQLで構成されたデータベースは、逆に水平に拡張されます。 NoSQLデータベース用のサーバーをさらに構築すると、多くのトラフィックを便利に処理できるという利点があります。 SQLよりも安価な汎用ハードウェアやクラウドベースのインスタンスにNoSQLデータベースをホストできるため、比較的安価なのが利点です。
これまでRDBMSとNoSQLについて一緒に調べてみましたが、どうですか? 一文でRDBMSとNoSQLを比較すると、RDBMSは一貫性と信頼性を確保するためにデータ型を制約し、NoSQLはこれらの制約を排除して速度、柔軟性、およびスケーラビリティを提供することがわかります。
しかし、データベースを構築する方法には完璧なソリューションはありません。 そのため、リレーショナルデータベースと非リレーショナルデータベースの両方を使用してサービスに合わせて設計されていることがよくあります。 したがって、私が構築したいDBのいくつかのユースケースを見て、適切なデータベースを選択することが重要です。