NoSQLデータベースの基本—そしてなぜそれらが必要なのか

NoSQLの世界への初心者向けガイド

データの整理は非常に難しい作業です。私たちが組織化と言うとき、私たちは実際にそのタイプと機能に応じてものを分類しています。

1つのオプションは、RDBMSがExcelシートのようなものであり、データをテーブルの形式で分類します。テーブル間の関係を形成できます。

クエリの質問あなたの見返りに関連する答えを与えるデータベース、。このクエリ言語はSQLまたは構造化クエリ言語です。

例えば、

select * from Employee_Data;

Employee_Dataテーブルからすべての従業員データを選択します。

リレーショナルデータベースは、テーブルがどのように機能するかの詳細な青写真であるスキーマに従います

あなたはAmazon、Facebook、そして非常に多くのネットワーキングアプリケーションを使用しています。それらはアップデートをリリースし、新しい機能を追加し、さらにモジュールを追加します。では、毎回スキーマをどのように変更するのでしょうか。このような大企業がスキーマの変更に時間と労力を費やすのは時間のかかることではありませんか?

これはSQLが機能しなかった場所です。

RDBMSの短所

リレーショナルデータベースは、最近人々が描いているほど悪くはありません。それらはまだ多くの組織で使用されています。全体像へのNoSQLの導入は、RDBMSが使用できなくなったスペースを埋めることです。

明確に理解できるように例を示します。

1.RDBMSは「データバラエティ」を処理できません。

非構造化データの量は年々増加し続けており、それを管理することは困難です。RDBMSは、テーブルの統一されたスキーマの下ですべてのタイプのデータを強制することはできません。

データサイロも開発者にとって問題です。

Tech Targetによると、データサイロは、1つの部門の管理下にあるデータのリポジトリです。それは組織の他の部分から隔離されています。

これは、同じデータに対してより多くのサイロが存在する場合、それらの内容が異なる可能性があることを意味します。どのリポジトリが最新バージョンを表すかについて混乱が生じます。

2013年から2020年までのデータの増加は、下の画像に示されています。

2020年には約44ゼタバイトのデータが生成されます。

相互に関連していないこのような多様なデータを処理することは、RDBMSでははるかに難しい可能性があります。

例:さまざまな体調の患者の詳細を保存することは困難です。このような多様なデータの分類は、RDBMSでは困難です。

2.テーブルと関係を変更するのが難しい。

テーブル間の関係の変更または新しいテーブルの追加は、既存の関係に影響を与える可能性があります。これは、スキーマを変更することを意味します。

スキーマの変更は、既存のスキーマを削除して新しいスキーマを考案するようなものです。

新しい機能を追加するには、新しい構造をサポートするためにすべての要素が必要になります。変化は避けられません。

例:追加の各列には、その列の値を持つ前のすべての行が必要です。一方、Cassandra(NoSQLデータベース)では、特定の行パーティションに列を追加できます。

3. RDBMSは、データベースのACIDプロパティに従います。

データベースのACIDプロパティは、原子性、一貫性、分離性、および耐久性です。‌

Atomicity —「オールオアナッシング」アプローチ。トランザクション内のいずれかのステートメントが失敗した場合、トランザクション全体がロールバックされます。

一貫性—トランザクションは、システムによって定義されたすべてのプロトコルを満たす必要があります。半分完了したトランザクションはありません。

分離—中間状態または未完了状態にある他のトランザクションにアクセスできるトランザクションはありません。各トランザクションは独立しています。

耐久性—トランザクションがデータベースにコミットされると、バックアップとトランザクションログを使用してトランザクションが保持されるようにします。

ACIDプロパティは柔軟ではありません。

たとえば、RDBMSは、正規化または信頼できる唯一の情報源の概念に従います。変更を加えるたびに、厳密なACIDプロパティを確保する必要があります。エンティティ整合性と参照整合性のルールも適用されます。

CAP定理

ウィキペディアによると、CAP定理(醸造者の定理)は、分散データストアが次の3つの保証のうち2つ以上同時に提供することは不可能であると述べています。

一貫性: ACIDのCのように。

可用性:‌リソースは常に利用可能である必要があります。エラー以外の応答があるはずです。

パーティションの許容範囲:障害の単一のポイント(またはノード)はありません。

3つの条件すべてを達成することは困難です。3つの間で妥協する必要があります。

救助のベース!

‌NoSQLは、BASEモデルと呼ばれるよりソフトなモデルに依存しています。BASEB asically利用できる、S OFT状態、E ventual一貫性)。

基本的に利用可能:データの可用性を保証します。リクエストに対する応答があります(失敗することもあります)。

ソフト状態:システムの状態は時間の経過とともに変化する可能性があります。

結果整合性:入力の受信を停止すると、システムは結果整合性になります。

NoSQLデータベースは、A、C、Dの要件を放棄し、その見返りとしてスケーラビリティを向上させます。

NoSQL

これがNoSQLが救いの手を差し伸べたときです。‌それは「SQLだけでない」または「非リレーショナル」データベースです。

NoSQLの特徴:

  • スキーマフリー
  • 結果整合性(BASEプロパティのように)
  • 単一障害点を回避するためのデータストアのレプリケーション。
  • データの多様性と大量のデータを処理できます。

NoSQLデータベースの種類

NoSQLデータベースは、次の4つの主要なカテゴリに分類されます。

キーバリューストア— Riak、Voldemort、およびRedis

ワイドカラムストア—CassandraとHBase。

ドキュメントデータベース— MongoDB

グラフデータベース—Neo4JおよびHyperGraphDB。

右側の単語は、NoSQLデータベースタイプのタイプの例です。

1.キーバリューストア

キー値ストアは、一意のキーと特定のデータ項目へのポインターが存在するハッシュテーブルを使用します。

キー値ストアが、個人の名前とその番号が一緒にマップされている電話帳のようなものであると想像してください。

Key Valueストアには、デフォルトのクエリ言語はありません。get、put、およびdeleteコマンドを使用してデータを取得します。これが高性能な理由です。

アプリケーション:コメントとセッション情報の保存に役立ちます。‌PinterestはRedisを使用して、ユーザー、フォロワー、フォロワー解除、ボードのリストを保存します。

2.ワイドカラムストア

列ストアデータベースでは、各行の列はその行に含まれています。

列ファミリーは、RDBMSテーブルの行のコンテナーです。キーは、複数の列からなる行を識別する。

行の列同じである必要はありません。列は、他の行に追加しなくても、いつでも任意の行に追加できます。それは、パーティション行ストア。

列データベースはどのようにデータを格納しますか?

アプリケーションSpotifyはCassandraを使用してユーザープロファイルの属性とメタデータを保存します。

3.ドキュメントデータベース

‌ドキュメントストアは、JSON、XML、またはBSON(JSONのバイナリエンコーディング)ドキュメントを使用してデータを保存します。

これはKey-Valueデータベースに似ていますが、ドキュメントストアは半構造化データで構成されています

単一のドキュメントは、レコードとそのデータを保存することです。

‌関係や結合はサポートしいません。

顧客の詳細と注文を保存したい場合は、ドキュメントストアを使用して保存できます。

用途:SEGAMongoDBを使用して、MongoDB上に構築された1,100万のゲーム内アカウントを処理します。

4.グラフデータベース

‌ノードと関係は、グラフデータベースの重要な構成要素です。ノードがエンティティを表します。関係は、二つのノードが関連付けされる方法を表します。

‌RDBMSでは、別のリレーションを追加すると、スキーマが大幅に変更されます。

グラフデータベースでは、データを1回だけ保存する必要があります(ノード)。保存されたデータには、さまざまなタイプの関係(エッジ)が指定されています。

ノード間の関係は事前に決定されています。つまり、クエリ時に決定されません。

永続的な関係をトラバースする方が高速です。

2つのノード間の関係を変更することは困難です。その結果、データベースに回帰的な変更が加えられます。

:この画像は、MySQLがAliceの正しい結果を見つけるために多くの操作を実行する必要がある場合の動作です。

グラフデータベース関係を予め決定します。

これは、NoSQLの探索を開始するために必要な基本情報の一部です。特定の用途のために新しいデータベースが発明されています。

アプリケーションが生成するデータの種類を学ぶと、適切なデータベースを簡単に選択できます。

私はライフレッスン、コーディング、テクノロジーに関するストーリーを書いています。詳細については、TwitterとMediumでフォローしてください。