NoSQL データベースとリレーショナル データベースの違い
Azure Cosmos DB は、非リレーショナルかつ水平方向にスケーラブルとして特徴付けられます。
水平方向のスケールと垂直方向のスケール
通常、ホストされている VM やコンピューティングのサイズを増やすことで、リレーショナル データベースは増大します。 Azure Cosmos DB などの NoSQL データベースをスケーリングするには、サーバーまたはノードを追加します。 これは、スケールアウトと呼ばれる方法です。これらのノードは、Cosmos DB では物理パーティションとも呼ばれます。 これらの物理パーティションに格納されるデータは、後で効率よくアクセスできるように整理されている必要があります。
データは、各ドキュメントに必要なプロパティの値を使用して、異なる物理パーティションにルーティングされます。 このプロパティはコンテナーの "パーティション キー" と呼ばれ、コンテナーの作成時に指定する必要があります。 コンテナーからデータの書き込みまたは読み取りが行われるときにパーティション キーを渡すことで、格納先パーティションにのみ要求が送信され、操作が効率的になります。
パーティション キーが必要であるということは制約のように見えるかもしれませんが、いくつかの大きな利点があります。 通常、リレーショナル データベースは拡大するとしてもせいぜい 100 TB 未満です。 NoSQL データベースが拡大できるサイズは無制限であり、1 つのパーティションのデータにアクセスしていれば、応答時間に影響を与えることなく拡大できます。
さらに、パーティションが追加されるにつれて、コンピューティングも追加され、データベースで同時にサポートされる処理の量も増加します。 これは、より多くの同時実行ユーザーに対応できることも意味します。 また、パフォーマンスへの影響もありません。
非リレーショナル データベースとリレーショナル データベース
NoSQL データベースの 2 つ目の特性は、データ間に外部キー、制約、強制的なリレーションシップが一切ないことです。 NoSQL データベースのデータは物理的に異なるサーバーに格納されるため、制約やリレーションシップを適用したり、データをロックしたりすると、パフォーマンスが低下したり、予測できなくなったりする可能性があります。
ただし、強制的なリレーションシップがないということは、リレーションシップを持つエンティティを NoSQL データベースでは管理できないという意味ではなく、別の方法で行う必要があることを意味するだけです。
データベースのデータ型がこれほど違う理由
リレーショナル データベースが登場して以来、コンピューティングの経済性がどのように変化してきたかを理解することで、この 2 種類のデータベースがなぜこれほどまでに異なるのかがわかります。
1970 年にリレーショナル データベースが発明されたときは、ストレージとメモリのコストはコンピューティングに比べて高価でした。 データベース モデルを正規化する目標は、重複するデータを減らし、データベース内のコストを削減することでした。 必要なすべてのデータに対して操作を一緒に実行するときは、データベース エンジンによってロックとラッチを使用して、厳密な ACID (原子性、一貫性、分離性、持続性) セマンティクスが適用されていました。 データにロックをかけることで、データの一貫性が確保されますが、コンカレンシー、待機時間、可用性におけるトレードオフがあります。
現在は、ストレージとメモリのコストがコンピューティングに比べて比較的安くなっているため、コスト効率を高めるためにストレージの効率を最適化する必要はなくなりました。 コンカレンシーと可用性のレベルを上げ、待機時間を短縮する必要があるワークロードの場合、これらの要件に最適化された新しい種類のデータベースが必要であったことから、NoSQL データベースが生まれました。
また、同じ理由から、NoSQL データベース用のデータのモデリングでの目標の 1 つは、データの読み取りまたは書き込みがコンピューティングに関して効率的な方法で行われるようにすることです。 NoSQL データベースにはドキュメント間結合などの関係演算子が存在しないため、データは、それを使用するアプリケーションにとって最も効率的になるように格納される必要があります。 多くの場合、データは、非正規化されたり、複製されたり、またはリレーショナル データ モデリングに使用されるリレーショナル正規化規則の多くに背く方法で格納されたりする必要があります。
リレーショナル ワークロードに NoSQL を使用できるか
この時点で、NoSQL データベースがリレーショナル ワークロードに使用するのに適しているかどうか疑問に思うかもしれません。 その答えはイエスです。 異なるエンティティ間にリレーションシップが存在するワークロードの場合、NoSQL データベースを確実に使用することができます。
NoSQL データベースは、アプリケーションで必要なパフォーマンス、スケール、または可用性のニーズをリレーショナル データベースでは満たせない場合によく使われます。
NoSQL データベースの設計の手法は、リレーショナル データベースのデータ モデリングの手法とは異なります。 また、これらの手法は、リレーショナル データベース設計の経験を持つユーザーにはわかりやすくありません。 リレーショナル データベースを構築するために学んだ一部のベスト プラクティスは、NoSQL データベースを設計するとき、アンチパターンになることがよくあります。
このモジュールの残りの部分と高度なモデリングのモジュールでは、高パフォーマンスの NoSQL データベースになるような方法でデータをモデリングするために使用される手法について説明します。