開発者がデータ管理やアプリケーションのデータベース選択を考えるとき、最初に思いつくのは—
—そう、テーブルです。
彼らはその後、ユーザー用のテーブルや製品、注文などのための別のテーブルを持つように、異なる種類のデータに対して異なるテーブルを設定します。データが異なるテーブルに分散されると、それぞれが相互に関係を持つことになります。したがって、テーブルは外部キーを介して他のテーブル内のアイテムを参照します。そして最終的に、彼らは問題を解決するために毎回リレーショナルデータベースを選ぶことになります。特に関係を扱うとき、非リレーショナルデータベースの概念は非常に直感に反するように思えるかもしれません。
しかし、問題は—データは常にフラットではないということです。データの要件は複雑であり、開発者がデータベースを考慮せずにデータを視覚化するとき、それはしばしば表形式ではありません。代わりに、ネストされたり、階層的であったり、さらにはグラフのように見えることさえあります。
データを扱い始めるたびにテーブルを想像する必要はありません。現代のアプリケーションでは、データはしばしば複雑なデータ型を持つ柔軟なスキーマである必要があります。したがって、それをテーブルに平坦化することは常に最良のアイデアではないかもしれません。その上、リレーショナルデータベースには独自のスケーリング制限もあります。スケーリングする際には、シャーディングについて心配する必要があり、これにはしばしばアプリケーションレベルでの重要な変更が必要になります。
非リレーショナルデータベース、または一般的にはNoSQLとして知られています。設計の選択肢でこれらを避けてきた場合、NoSQLの全ポテンシャルを引き出すことを見逃しているかもしれません。この記事では、非リレーショナルデータベースの定義を簡単に説明し、異なる実生活の問題に対するさまざまなNoSQLデータベースの選択肢を提供します。
最後に、リレーショナルデータベースよりもNoSQLデータベースが提供する利点や、リレーショナルデータベースが依然としてより適した選択肢であるシナリオに触れます。
非リレーショナルデータベース、またはNoSQL
簡単に言えば、これらのデータベースは非表形式でデータを格納します。それぞれが特定の目的とサポートできる非構造化データの種類に向けて構築された異なるタイプがあります。最も一般的なものは次のとおりです:
- ドキュメントデータベース:JSONライクなドキュメントにデータを格納
- キー値データベース:一意のキーに対する「キー値」構造でデータを格納
- グラフデータベース:ノード、エッジ、プロパティを使用してデータポイント間の関係を表現および格納
その他のタイプには、列指向、インメモリ、時系列データベースがあります。
異なるNoSQLデータベースプロバイダーは、特定のフィールドにインデックスを作成したり、開発者向けのSDK、高可用性、トランザクション処理、データベースの簡単なスケーリングなどの機能を提供しています。
NoSQLで実生活の問題を解決
NoSQLデータベースを使用して実生活の問題を解決する例を見てみましょう。
コメントとタグをサポートするブログアプリケーションの構築
ドキュメントデータベースはこのようなコンテンツ管理システムに最適です。各コンテンツは個別のドキュメントになります。スキーマは柔軟で、各ドキュメントにはサブコレクションを含めることができます。ドキュメントデータベースプロバイダの配列フィールドのインデックス機能を活用して、複雑なクエリを実行することができます。例えば、すべてのブログとそのタグを取得することができます。
ソーシャルおよびプロフェッショナルネットワーキングプラットフォーム
グラフデータベースは、人々の複雑な関係を定義するのに役立ちます。グラフ検索を介して友達の友達を簡単に見つけることができます。
IoTセンサーデータ
タイムシリーズデータを使用して、センサーデバイスからのタイムスタンプ付きデータの大量処理を行います。
ショッピングカート
高い同時性と迅速な読み取り書き込みを提供するキーバリューペアデータベースを使用します。また、キーバリューデータベースを使用してユーザーのセッション情報を保存し、ショッピングカートをセッション内のフィールドとして使用することもできます(個々のショッピングセッション用)。
推薦エンジン
ユーザー、製品、および好みの間の関係をマッピングするためにグラフデータベースを使用します。
NoSQLデータベースがリレーショナルデータベースを凌駕する点
以下に、NoSQLデータベースがリレーショナルデータベースに対して優位性を提供するポイントをいくつか示します。
- 開発者の生産性: NoSQLデータベースプロバイダーは、現代のアプリケーション開発向けに調整されたAPIとSDKを提供し、より迅速なプロトタイピングと開発が可能になります。
- スケーラビリティ: NoSQLデータベースは水平方向にスケーリングできる(単にサーバーまたはノードを追加するだけで済む)ため、垂直スケーリングが必要なリレーショナルデータベースと比較して、コスト効果が高く、管理が容易です。
- 柔軟性: NoSQLは柔軟なスキーマを提供し、アジャイル開発や進化するアプリケーション要件に最適です。
- 入れ子データの処理: データがしばしば入れ子構造や階層構造(JSONやXML形式など)であることがあります。このような形式をサポートできるNoSQLデータベースは、これらのデータを扱う際にリレーショナルデータベースよりも複雑な変換が必要になる場合があります。
リレーショナルデータベースがまだ有利な場面
以下は、リレーショナルデータベースが依然として関連があり、適切な選択肢であるユースケースのいくつかです。
- 分析とレポーティング: リレーショナルデータベースはアドホッククエリ、集計、レポート作成に最適化されています。分析やレポート作成のユースケースでは、リレーショナルデータベースは依然として選択肢の一つです。
- 関連と結合の多用: NoSQLデータベースでも関連を管理して取り扱うことは可能ですが、アプリケーションが異なるデータセット間で結合に非常に依存している場合、リレーショナルデータベースは依然として適しているかもしれません。
- 可用性よりも一貫性: データの一貫性が可用性よりも重要なシナリオ(例:金融取引)では、リレーショナルデータベースがより多くの保証を提供できます。
これで記事は終了です。私たちはNoSQLデータベースとは何か、そしてそれがデータ管理における現実の課題にどのように対処するかを探りました。NoSQLデータベースは、複雑なデータ構造を扱う柔軟性から、提供者が提供する強力な機能まで、現代のアプリケーションに多くの可能性を開きます。まだNoSQLに挑戦していない方々には、次のプロジェクトで試してみることをお勧めします — あなたのニーズにぴったり合うかもしれません。
Source:
https://dzone.com/articles/nosql-for-relational-minds