私は、NoSQL全体などについて少し混乱しています。OracleやMySQLのようなものよりもMongoDBのようなものを使用することを選択するのはいつですか?使い方がそれらの間で異なる限り、私は「違い」を本当に理解していません。
私の理解では、NoSQLタイプのデータベースはRDBMSに代わるものではありませんが、正確には何を意味するのでしょうか?
私は、NoSQL全体などについて少し混乱しています。OracleやMySQLのようなものよりもMongoDBのようなものを使用することを選択するのはいつですか?使い方がそれらの間で異なる限り、私は「違い」を本当に理解していません。
私の理解では、NoSQLタイプのデータベースはRDBMSに代わるものではありませんが、正確には何を意味するのでしょうか?
回答:
3つのペットプロジェクトでCouchDBを使用したことがあります。
MSSQLやMySQLのようなものよりもこれを選んだ主な理由は、それを使用するときに得られる柔軟性です。厳格なスキーマはありません。3か月後、特定のテーブルに追加のフィールドが必要であり、これとそれが必要な場合は、それを変更するだけで、そこから波及します。
私が使用しCouchDBのを始めて、それを使用する方法については、プレスカンファレンスで。
たとえば、CouchDBはjsonを使用してデータベースと通信します。ご使用の言語がデータをPOSTできる場合は、それを使用してDBと通信できます。
また読む: リレーショナルデータベースの代わりにドキュメントベースのデータベースを使用する必要があるのはなぜですか?StackOverflowで
別の回答を追加して申し訳ありませんが、ここの回答はどれも非常に満足のいくものではありません。この答えはMongoDBに固有のものです(リレーショナルデータベースではない他の膨大なデータストレージオプションとは対照的です)。
長所:
短所:
よく誤解される点:
Renesisから恥知らずに盗むには(実際、私はこの答えをCWにしています):
他のタイプの代わりにRDBMSを使用する:
データがリレーショナルでない場合、パフォーマンスやスケーラビリティなどのNoSQLデータベースを使用することには大きな利点があります(もちろん状況によって異なります)。CQRSのような一部の設計パターンにより、従来はSQLデータベースの排他的使用を必要とする領域で、非リレーショナルデータを活用しやすくなりました。
キャッシュされたデータには、mongoなどのデータベースを使用するのが一般的です。たとえば、レポートを生成する必要がある場合は、大量のデータをその場で結合および集約する複雑なSQLクエリを実行できます。または、生成に必要なものがすべて揃っているmongoデータベースから単一のjsonドキュメントを取得することもできます。レポート。これにより、データの読み取りは非常に簡単(かつ高速)になりますが、データの書き込みは非常に複雑になります(これがCQRSの出番です)。
MongoDBなどのデータベースは、データがどこにあるかを通常知っている場合に便利です(いくつかの複雑なクエリを記述する必要はありません)。Mongoでは、「関連」データは親データにネストされているか、プライマリ/外部キーを持っています。これは、たとえば、投稿やコメントがある場合に便利です。一般に、投稿のコンテキスト外にコメントを表示することはないので、コメントを投稿に含めることは理にかなっています(そのようにすると、別のテーブルを照会する必要なく投稿のすべてのコメントを取得できます)。
MongoDBはスキーマレスです。これは、ほとんどの場合、あなたが投げたデータのあらゆる構造を取ることを意味します。
一方、集約関数を使用する必要があり、Mongoの埋め込みや単純なリレーションでは達成できない複雑な方法でデータをクエリする必要があると感じた場合は、MySQLやPostgreSQLのようなRDBMSを使用する時が来たことがわかります。
MongoDBは、SQLに代わるものではありません。さまざまなニーズを満たすだけで、MongoDBとRDBMSを組み合わせて使用できます。私の意見では、データを柔軟にしたり、親ドキュメントに埋め込んだりする必要がない場合、MongoDBはそれほど必要ではありません。MongoDBを使用した開発は、プロジェクト(Railsなど)を立ち上げて実行するのに必要な手順がはるかに少ないため、非常に楽しいです。変更が必要ですか?問題ない。モデルに属性を追加するだけです。できた
私は他の多くのNoSQLデータベースについて話すことはできませんが、RDBMSでは満たせない特定のニーズを満たすために通常同様に設計されていることを知っています。一部は完全にメモリに常駐するか、非常に簡単に分割またはスケーリングできます。Cassandraは、ノードがダウンしてもデータを失うことなく動作し続けるように設計されていると確信しています。Redisは基本的にメモリに常駐するキー値ストアであり(永続化のための定期的なディスク書き込みを使用)、セットなどのデータ型を保存してソートする機能も備えています。
主なメリットは、データを分割したい場合、またはマルチマスターデータベースを使用したい場合です。MySQLでデータを分割できますが、それは大きな苦痛に変わります。多くの書き込みを行っている場合、複数のサーバー間でデータを分割すると便利なことがよくあります。これを行う際に参照整合性を強くしたい場合、CAPの定理を調べることは不可能ではないにしても非常に難しいことがあります。
SQLデータベースの整合性は非常に優れていますが、パーティションのサポートが非常に悪いため、NoSQLデータベースは逆の傾向があります。パーティション分割は簡単ですが、多くの場合、結果整合性と呼ばれます。あなたが大丈夫なメッセージングサイトを構築しているなら、おそらく銀行は大丈夫ではないでしょう。
プラスは、データを保存する方法に複数のモデルがあるため、SQLデータベースを使用する前に、データの実装方法を選択できることです。
SE Radioには、このテーマに関するいくつかの良いエピソードがあります。
MongoDBは、大量のデータを記述し、クエリのニーズがそれほど複雑でない場合に適切に機能します。したがって、MongoDBは、コマンド側でイベントソースを使用してCQRSを実装する場合に適しています。つまり、イベントストアはMongoDBデータベースです。
クエリ側では、柔軟性があるため、ビューとWCF Data Servicesが先頭にあるSQL Server dbを引き続き使用します。ほとんどの場合、クエリにはリレーショナルDBのパワーが本当に必要になると思います。
MongoDBとRDBMSの直接的な根本的な違いは、基礎となるデータモデルです。リレーショナルデータベースはデータをテーブルと行に構成し、MongoDBはデータをJSONドキュメントのコレクションに構成します。JSONは、自己記述的で人間が読み取り可能なデータ形式です。元々はブラウザとサーバー間の軽量な交換用に設計されたもので、多くの種類のアプリケーションで広く受け入れられています。
JSONドキュメントは、いくつかの理由でデータ管理に特に役立ちます。JSONドキュメントは、それ自体がキーと値のペアである一連のフィールドで構成されます。つまり、各JSONドキュメントは、どこにいても人間が読める独自のスキーマ設計を持ち、意味を失うことなく、データベースとクライアントアプリケーション間でドキュメントを簡単に移動できます。
JSONは、アプリケーション層で使用するための自然なデータ形式でもあります。JSONは、列と行で構成されるテーブルよりも豊富で柔軟性のあるデータ構造をサポートします。JSONフィールドは、数値、文字列、ブール値などのフィールドタイプをサポートすることに加えて、配列またはネストされたサブオブジェクトにすることができます。これは、アプリケーションが動作するオブジェクトをより厳密に表現した一連の洗練された関係を表現できることを意味します。データベースでJSONドキュメントを使用するということは、データベースとそれが提供するアプリケーションの間にオブジェクトリレーショナルマッパーが必要ないことを意味します。適切な形式でデータを保持できます