MySQL、PostgreSQL、MS SQL Serverなどのソリューションはリレーショナルデータベースシステムであり、NoSQL、MongoDBなどは非リレーショナルDBMSであることを私は知っています。
しかし、2つのタイプのシステムの違いは何ですか?
レイマン用語が望ましい。
ありがとう。
MySQL、PostgreSQL、MS SQL Serverなどのソリューションはリレーショナルデータベースシステムであり、NoSQL、MongoDBなどは非リレーショナルDBMSであることを私は知っています。
しかし、2つのタイプのシステムの違いは何ですか?
レイマン用語が望ましい。
ありがとう。
回答:
うーん、あなたの質問が何であるかよくわかりません。
タイトルではデータベース(DB)について質問しますが、テキストの本文ではデータベース管理システム(DBMS)について質問します。2つは完全に異なり、異なる回答が必要です。
DBMSは、DBにアクセスできるようにするツールです。
DBは、データ自体以外に、そのデータがどのように構造化されているかという概念です。
したがって、オブジェクト指向以外のコンパイラを使用して指向オブジェクト手法でプログラミングできるのと同じように、またはその逆も同様です。RDBMSを使用せずにリレーショナルデータベースをセットアップしたり、RDBMSを使用して非リレーショナルデータを格納したりできます。
リレーショナルデータベース(RDB)の意味に焦点を当て、システムが他の人に何をするかについての議論を残します。
リレーショナルデータベース(概念)は、さまざまな「テーブル」またはさまざまなタイプのデータバケットからの情報をリンクできるようにするデータ構造です。データバケットには、キーまたはインデックスと呼ばれるものが含まれている必要があります(これにより、バケット内のデータのアトミックチャンクを一意に識別できます)。他のデータバケットは、データアトムとキーが指すアトムの間にリンクを作成するために、そのキーを参照する場合があります。
非リレーショナルデータベースは、異なるバケットからのデータを相互にリンクするための明示的で構造化されたメカニズムなしでデータを格納するだけです。
このようなスキームの実装に関しては、インデックス付きの紙のファイルがあり、別の紙のファイルでインデックスを参照して関連情報を取得する場合、非常に単純なものではありますが、リレーショナルデータベースを実装しています。したがって、コンピューターも必要ないことがわかります(もちろん、コンピューターがないとすぐに面倒になる可能性があります)。同様に、RDBMSは必要ありませんが、おそらくRDBMSがその仕事に適したツールです。とはいえ、そこにあるさまざまなツールで何ができるかについてはさまざまなバリエーションがあるため、仕事に適したツールを選択することはそれほど簡単ではないかもしれません。
これが素人用語で十分であり、理解に役立つことを願っています。
あなたが「知っている」ことのほとんどは間違っています。
まず第一に、リレーショナルの達人のいくつかが日常的に(そして時には激しく)指摘しているように、SQLは多くの人々が考えるほどリレーショナル理論に実際にはほとんど適合していません。第二に、「NoSQL」のものの違いのほとんどは、それがリレーショナルであるかどうかとは比較的関係がありません。最後に、「NoSQL」とSQLの違いを言うのはかなり難しいです。なぜなら、両方がです。、かなり幅広い可能性を表しているです。
信頼できる大きな違いの1つは、SQLをサポートするほとんどすべてのものが、データベース自体のトリガーなどをサポートすることです。つまり、データが常に内部的に一貫していることを保証することを目的としたルールをデータベースに適切に設計できます。たとえば、データベースが人を主張するように設定できますなければならない住所があります。そうすると、人を追加するたびに、基本的にその人を特定の住所に関連付けるように強制されます。新しい住所を追加したり、既存の住所に関連付けたりすることもできますが、何らかの方法で、その人は住所を持っている必要があります。同様に、アドレスを削除すると、現在そのアドレスにいるすべての人を削除するか、それぞれを他のアドレスに関連付ける必要があります。すべての人に母親が必要である、すべてのオフィスに電話番号が必要であるなど、他の関係についても同じことができます。
物事のこれらの種類はまた、あなたが人を追加しているようにデータベースに他の誰かが見える場合は、彼らはどちらかのすべての人を見ていないだろうか、あるいは、彼らは人を参照してくださいよ、アトミックに起こることが保証されていることを注意して住所(または母親など)
ほとんどのNoSQLデータベースは、データベースにこの種の強制を適切に提供しようとはしていません。データベースを使用するコードでは、データに必要な関係を強制するのはあなた次第です。ほとんどの場合、部分的にしか正しくないデータを表示することも可能です。そのため、すべての人が親に関連付けられているはずの家系図がある場合でも、課した制約が実際にはない場合があります。施行。いくつかはあなたにそれを自由にさせます。他の人はそれが一時的にのみ起こることを保証しますが、それがどれくらい続くことができるか/続くかは疑問に思われるかもしれません。
リレーショナルデータベースは、述語の正式なシステムを使用してデータをアドレス指定します。基礎となる物理的な実装は実質的ではなく、特定の操作に合わせて最適化するために変更できますが、常にリレーショナルモデルを想定する必要があります。素人の言葉で言えば、それは私のテーブル(関係)の各行(タプル)がいくつの値(属性)を持っているかを正確に知っているということです。そして今、私はそれに応じて、徹底的にそして極端に事実を利用したいと思います。それがあります真獣の性質。
私たちは明らかにリレーショナル育成を行った世代であるため、リレーショナルモデルの観点からNoSQLデータベースモデルを見ると、やはり素人の言葉で言えば、最初の明らかな違いは、行にできる値の数についての仮定がないことです。含むことがこれまでに作られています。これは本当に問題を単純化しすぎており、すべてのNoSQLデータベースの物理モデルの複雑さに完全には当てはまりませんが、これはリレーショナルモデルの頂点であり、私たちが残さなければならない最初の仮定であり、必要に応じて最大のものです。私たちがしなければならない飛躍。
すべてのDBMSに当てはまる2つのことに同意できます。それは、あらゆる種類のデータを格納できることと、考えられるあらゆる方法でデータを管理できるようにするための十分な数学的基盤を備えていることです。現実には、2つのポイントのいずれかをテストするという間違いを犯したくはなく、実際のDBMSが実際に作成されたものに固執するだけです。素人の言葉で言えば、内なる獣を尊重してください!
(リレーショナルモデルを中心に展開する(明らかに)十分に確立された標準を、NoSQLデータベースによって提供される多くのフレーバーと比較することを避けたことに注意してください。必要に応じて、NoSQLデータベースを完全ではないDBMSの総称と見なしてください。他のすべてを除いて、リレーショナルモデルを想定します。違いは多すぎますが、それが主な違いであり、2つを理解するのに最も役立つと思います。)
この質問を少しの技術を参照するレベルで説明してみてください
MongoDBと従来のSQLを比較して、Twitterにツイートを投稿するシナリオを想像してみてください。このツイートには9枚の写真が含まれています。このツイートとそれに対応する写真をどのように保存しますか?
従来のリレーションシップSQLの観点から、ツイートと画像を別々のテーブルに保存し、新しいテーブルを作成することで接続を表すことができます。
さらに、画像タイプであるフィールドを設定し、9枚の画像をバイナリドキュメントに圧縮してこのフィールドに保存することができます。
MongoDBを使用すると、次のようなドキュメントを作成できます(リレーショナルSQLのテーブルの概念に似ています)。
{
"id":"XXX",
"user":"XXX",
"date":"xxxx-xx-xx",
"content":{
"text":"XXXX",
"picture":["p1.png","p2.png","p3.png"]
}
したがって、私の意見では、主な違いは、データをどのように保存するか、およびそれらの間の関係のストレージレベルについてです。
この例では、データはツイートと写真です。それらの間の関係のストレージレベルに関する異なるメカニズムも、両者の違いに重要な役割を果たします。
この小さな例が、SQLとNoSQL(ACIDとBASE)の違いを示すのに役立つことを願っています。
インターネットからのNoSQLの目標に関する写真のリンクは次のとおりです。
リレーショナルと非リレーショナルの違いはまさにそれです。リレーショナルデータベースアーキテクチャは、主キー、外部キーなどの制約オブジェクトを提供し、リレーション内の2つ以上のテーブルを結び付けることができます。これは、テーブルを正規化するのに適しています。つまり、データベースが表すものに関する情報を多くの異なるテーブルに分割すると、データの整合性を維持できます。
たとえば、従業員に関する情報を格納する一連のテーブルがあるとします。他のテーブルからそのようなレコードに関連するすべてのレコードを削除せずに、テーブルからレコードを削除することはできません。このようにして、データの整合性を実装します。非リレーショナルデータベースは、データの整合性を実装できるようにするこの制約構造を提供しません。
データベースのテーブルにデータを入力するために使用されるフロントエンドアプリケーションでこの制約を実装しない限り、西部開拓時代と比較できる混乱を実装していることになります。
まず、データベースが必要な理由から始めましょう。
効率的な方法で保存されたデータを取得できるように情報を整理するのに役立つデータベースが必要です。
リレーショナルデータベース管理システム(SQL)の例:
1)Oracleデータベース
2)SQLite
3)PostgreSQL
4)MySQL
5)Microsoft SQL Server
6)IBM DB2
非リレーショナルデータベース管理システム(NoSQL)の例
1)MongoDB
2)カサンドラ
3)Redis
4)Couchbase
5)HBase
6)DocumentDB
7)Neo4j
リレーショナルデータベースには正規化されたデータがあります。情報は行と列の形式でテーブルに格納されます。通常、データが正規化された形式の場合、データの冗長性を減らすのに役立ちます。また、テーブル内のデータは通常、相互に関連しています。データを取得したい場合は、joinステートメントを使用してデータをクエリし、必要に応じてデータを取得できます。これは、書き込みを増やし、読み取りを減らし、データをあまり必要としない場合に適しています。また、比較的簡単です。非リレーショナルデータベースよりもテーブルのデータを更新します。水平スケーリングは不可能、垂直スケーリングはある程度可能。CAP(一貫性、可用性、パーティショントレラント)、およびACID(原子性、一貫性、分離、期間)への準拠。
例としてPostgreSQLを使用してリレーショナルデータベースにデータを入力する方法を示します。
まず、次のように製品テーブルを作成します。
CREATE TABLE products (
product_no integer,
name text,
price numeric
);
次に、データを挿入します
INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);
ここで、リレーショナルデータベースでは、外部キー、サブジェクトIDを介して、リレーションシップを使用して学生テーブルとサブジェクトテーブルをリンクできますが、非リレーショナルデータベースでは、リレーションシップがないため、2つのドキュメントが必要ないため、すべてのサブジェクトの詳細と1つのドキュメントの学生の詳細に学生のドキュメントと記載されていると、データが重複し、レコードの更新が面倒になります。
非リレーショナルデータベースでは、固定スキーマはなく、データは正規化されていません。データ間の関係は作成されず、すべてのデータはほとんど1つのドキュメントに入れられます。大量のデータを処理する場合に最適で、一度に大量のデータを転送できます。固定スキーマがないため、大量の読み取りと少ない書き込み、少ない更新でデータのクエリが少し難しい場合に最適です。水平および垂直スケーリングが可能です。CAP(一貫性、可用性、パーティショントレラント)およびBASE(基本的に利用可能、ソフト状態、結果整合性)への準拠。
Mongodbを使用して非リレーショナルデータベースにデータを入力する例を示しましょう
db.users.insertOne({name: ‘Mary’, age: 28 , occupation: ‘writer’ })
db.users.insertOne({name: ‘Ben’ , age: 21})
したがって、dbというデータベースには、usersというコレクションと、データを追加するinsertOneというドキュメントがあり、最初のレコードには3つの属性があり、2番目の属性には2つの属性しかないため、固定スキーマはありません。 、これは非リレーショナルデータベースでは問題ありませんが、リレーショナルデータベースのスキーマは固定されているため、リレーショナルデータベースではこれを行うことはできません。
別の別の例を見てみましょう
({Studname: ‘Ash’, Subname: ‘Mathematics’, LecturerName: ‘Mr. Oak’})
したがって、非リレーショナルデータベースでは、関係が定義されていないため、学生の詳細と主題の詳細の両方を1つのドキュメントに入力できますが、ここではデータの重複が発生する可能性があり、更新エラーが発生する可能性があります。
これがすべてを説明することを願っています
素人の言葉で言えば、それは強く構造化されているのか非構造化されているのかということです。これは、DBに対する適応性の程度が異なることを意味します。特に、特定の参照インデックスが別のアイテム->この関係にリンクできることを確認する必要があるため、インデックス付けに違いが生じます。リレーショナルDBのより厳密な構造は、この要件に由来します。
NosDBは、リレーショナルDBと非リレーショナルDBの両方を提供し、http://www.alachisoft.com/nosdb/sql-cheat-sheet.htmlの両方をクエリする方法を提供していることに注意してください。