目次:
- スキーマに依存しない
- リレーショナルデータベース管理システムは、20年以上にわたりアプリケーションデータを保存するための主要な方法でした。それらを支える理論を証明するために、数学的な研究が多かった。
- コモディティサーバー
ビデオ: An Introduction To NoSQL Databases 2024
NoSQLの書籍やブログは、NoSQLデータベースとは異なる意見を提供しています。次のリストに示すNoSQLの4つのコア機能が、ほとんどのNoSQLデータベースに適用されます。このリストは、NoSQLと従来のリレーショナルDBMSを比較しています。
-
スキーマに依存しない: データベーススキーマは、リレーショナルデータベース内のすべての可能なデータおよびデータ構造の説明です。 NoSQLデータベースを使用すると、スキーマは必要ありません。これにより、事前スキーマ設計をしなくても情報を自由に格納できます。
<! - 1 - > -
非リレーショナル: データベース内の関係は、データテーブル間の接続を確立します。たとえば、取引明細のリストを個別の配送明細のリストに接続することができます。 NoSQLデータベースでは、この情報は集約として格納されます。配信アドレスを含むトランザクションに関するすべてのレコードが1つのレコードです。
-
商品ハードウェア: 一部のデータベースは、専用のストレージおよび処理ハードウェアで最適(またはのみ)に動作するように設計されています。 NoSQLデータベースを使用すれば、安価な市販のサーバーを使用できます。これらの安価なサーバーを追加することで、NoSQLデータベースを拡張してより多くのデータを処理することができます。
<! - 2 - > -
高度に配布可能: 分散データベースは、複数のデバイスに一連の情報を格納して処理することができます。 NoSQLデータベースを使用すると、単一の大きなデータベースを保持するためにサーバーのクラスタを使用できます。
スキーマに依存しない
NoSQLデータベースはスキーマに依存しません。 NoSQLデータベースにデータを格納するには、事前に多くの設計作業を行う必要はありません。データベースがどのように内部的に格納され、どのように動作するかを知らなくても、データのコーディングと格納と検索を開始できます。 (高度な機能が必要な場合は、手動でインデックスを追加したり、データストレージ構造を微調整することができます。)スキーマのアジノスクリプトは、NoSQLデータベースとリレーショナルデータベースの最も大きな違いです。
<! - 3 - >スキーマにとらわれないデータベースにとって大きな利点は、開発時間が短縮されることです。この利点は、複数の開発リリースを経てデータベースの内部データ構造を変更する必要がある場合に増加します。
たとえば、従来のRDBMSでは、スキーマの再設計プロセスを実行します。スキーマは、どのデータを期待するかをデータベースに指示します。格納されたデータまたは構造を変更し、変更されたスキーマを使用してデータベースを再構築する必要があります。変更する場合は、既存のデータをどのように再構築するかを決めるのに多くの時間を費やす必要があります。 NoSQLデータベースでは、単に異なるデータ構造を保存するだけです。あらかじめデータベースに伝える必要はありません。
クエリを適宜変更しなければならない場合があります(データ型固有のクエリよりも小さくても大きくするために、整数範囲のインデックスなどの臨時の インデックス を追加することもできます)。それはRDBMSよりもはるかに痛いです。
RDBMSは、柔軟性と、SQLを使用することによってクエリの変更が急増したために浮上しました。 NoSQLデータベースは、スキーマとクエリの両方を変更するための柔軟性を提供します。これは、時間が経つにつれてますます採用される主な理由の1つです。
クエリであっても、スキーマの変更を知ることについてあまり心配する必要はないかもしれません。フィールドアカウント番号のインデックスを考えてください。 アカウント番号 は、 NoSQLデータベース。構造体を変更して、 口座番号 が格納されている場所を変更することができます。また、要素の名前が文書内の他の場所であれば、クエリメカニズムを変更せずにクエリで引き続き使用できます。
すべてのNoSQLデータベースが完全にスキーマに依存しているわけではないことに注意してください。 HBaseなどの一部では、列定義を変更するためにデータベースを停止する必要があります。定義済みのフィールド(ここでは列)すべてが、レコードごとに事前に知っている必要はなく、列ファミリだけであるため、NoSQLデータベースと見なされます。
RDBMSでは、レコードの個々のフィールドを null 値として識別できます。 RDBMSの問題点は、レコードが将来その列に値を持つ可能性がある場合に備えて、ストレージがヌル値用に予約されている場合に、格納されたデータのサイズとパフォーマンスが悪影響を受けることです。カサンドラでは、その列のデータを提供しないだけで問題を解決します。非リレーショナル
リレーショナルデータベース管理システムは、20年以上にわたりアプリケーションデータを保存するための主要な方法でした。それらを支える理論を証明するために、数学的な研究が多かった。
この基盤は、テーブルが互いにどのように関係しているかを説明します。 1つのOrder行は多くのDelivery Address行に関連することがありますが、各Delivery Address行は複数のOrder行にも関連します。これは多くの
- - - 多くの関係 です。 NoSQLデータベースには、レコード間の関係の概念がありません。代わりにデータを非正規化します。つまり、NoSQLデータベースでは、配信アドレスが埋め込まれたOrder構造が使用されます。つまり、配信アドレスは、配信アドレスが使用されているすべての注文行で複製されます。このアプローチには、複数のデータ構造(テーブル)にわたって複雑なクエリ時間結合を必要としないという利点があります。 NoSQLデータベースは、個々のレコードがデータベース内の他のレコードとどのように関連しているかについての情報を格納していません。ただし、NoSQLデータベースは、格納できるデータ構造の点でより柔軟性があります。
オンライン小売店からの注文を考えてみましょう。注文には、商品コード、数量、商品価格、商品説明、配送先住所や支払い情報などの注文者に関する情報が含まれます。
10個の行をリレーショナルデータベースのさまざまなテーブルに挿入するのではなく、JSONまたはXMLドキュメントなどのすべての注文情報に対して単一の構造を保存することができます。リレーショナルデータベース理論では、データを正規化する(つまり、重複したデータを削除するためにフィールドとテーブルを整理する)ことが目標です。
NoSQLデータベース(特に文書や集約データベース)では、意図的にデータを非正規化し、いくつかのデータを何度も保存します。
たとえば、顧客が一度保管して複数の注文で参照するのではなく、顧客が行った多くの注文に「顧客配達アドレス」を複数回保管することができます。そうするには余分なストレージスペースが必要になり、アプリケーションの管理に少し前もって考えなければなりません。それではなぜですか?
データを複数回保存することには2つの利点があります。 簡単な保存と取り出し: 保存して1つのレコードを取得するだけです。
クエリ速度:
リレーショナルデータベースでは、クエリー時に情報を結合し、テーブルに制約を追加します。これにより、データベースエンジンは多くのテーブルを評価する必要があります。異なるテーブル間でのクエリ制約が増えるほど、クエリ速度が低下します。これは、RDBMSがビューを事前計算した理由です.NoSQLデータベースでは、照会を評価するために必要なすべての情報が単一の文書内にあります。したがって、一致する文書のリストをすばやく特定できます。
-
リレーショナル・ビューとNoSQLの非正規化は、レコード間のデータ拡散の問題に対する異なるアプローチです。 NoSQLでは、同じデータの異なるビューを表す複数の非正規化を維持する必要があります。このアプローチでは、ストレージのコストが増加しますが、クエリ時間が大幅に短縮されます。 非標準化データ(別名
-
マテリアライズド・ビュー )は、NoSQLソリューションをディスカウントする重要な理由ではありません。それは、それ自身の長所と短所を持って同じ問題にアプローチするだけの方法です。
NoSQLは汎用性が高く、汎用ハードウェアを使用します。多くのNoSQLデータベースでは、データベース全体を1台のサーバーに格納するのではなく、複数のコンピュータを使用して1つのデータベースのデータを格納します。
複数のマシンにデータを格納して照会することは困難です。すべてのサーバーに照会を送信し、応答を待つ必要があります。うまくいけば、分散クエリを処理するために互いに話すのに十分な速さになるようにマシンをセットアップしてください! このアプローチの主な利点は、大容量のデータセットの場合です。一部のストレージ要件では、使用可能な最大の単一サーバーでも、必要なすべてのデータを格納または処理できないためです。 TwitterとFacebookのすべてのメッセージを考えてみましょう。ほとんどの人が朝食やかわいい猫のビデオのために持っていたものであっても、そのデータを効果的に管理するためには、分散した仕組みが必要です。 データベースを配布する利点は、
コモディティサーバー
と呼ばれる安価なサーバーを使用できることです。小規模なデータセットであっても、1台の高性能サーバーではなく、3台の汎用サーバーを購入するほうが安いかもしれません。
もう一つの重要な利点は、高可用性の追加が容易であることです。すでに途中でデータを配布しています。クラスタ内の他のサーバー間でデータを1〜2回複製すると、サーバーの1つがクラッシュしたり、焼損したり、死んでも、データにはアクセスできます。
サポートされている有料版のデータベースを開発会社から購入しない限り、すべてのオープンソースデータベースが高可用性をサポートするわけではありません。
高度に配布可能なルールの例外はグラフデータベースの例外です。適時に特定のグラフクエリに効果的に答えるには、データを単一のサーバーに格納する必要があります。誰もこの特定の問題をまだ解決していません。 トリプルストアまたはグラフストアが必要かどうかを慎重に検討します。トリプルストアは一般に配布可能ですが、グラフストアは配布されません。必要なものは、サポートする必要のあるクエリによって異なります。