web-dev-qa-db-ja.com

NoSQLユースケースシナリオまたはNoSQLを使用する場合

すべての誇大広告では、これをいつ使用するかに関する信頼できる情報を見つけるのは本当に難しいようです。だから私は次の質問を投げかけます、そして、これらが本当に愚かな質問であるならば、すみません。

  1. ユーザーデータにNoSQLを使用する必要がありますか?例えば。プロファイル、ユーザー名+パスワードなど.
  2. 重要なコンテンツにNoSQLを使用する必要がありますか?例えば。記事、ブログ投稿、製品在庫など.

私はノーと仮定していますか?そして、NoSQLは、データを失うことのない、すぐにアクセスできるもののためだけのものだと感じています。しかし、NoSQLアプリにはデータが失われないように冗長性が組み込まれていることも読みました。

また、上記の2つの例が悪い場合、NoSQLを使用する特定のビジネスユースケースを教えてください。私は多くの一般的な説明を見ますが、実際の例はあまり見ません。私が考えることができるのは、ユーザー間のメッセージングと分析だけです。

ありがとう!

228
user1389722

それは本当に「依存する」ちょっとした質問です。いくつかのgeneralポイント:

  • 通常、NoSQLは非構造化/「スキーマレス」データに適しています-通常、スキーマを前もって明示的に定義する必要はなく、式なしで新しいフィールドを含めることができます。
  • NoSQLは、RDBMSの世界ごとにJOINがサポートされていないため、通常、非正規化スキーマを好みます。そのため、通常、データは平坦化され、非正規化された表現になります。
  • NoSQLを使用しても、データが失われる可能性があるわけではありません。異なるDBには異なる戦略があります。例えばMongoDB-基本的にパフォーマンスとデータ損失の可能性をトレードオフするレベルを選択できます-最高のパフォーマンス=データ損失の範囲を拡大します。
  • 多くの場合、NoSQLソリューションのスケールアウトは非常に簡単です。データを複製するノードを追加することは、a)より高いスケーラビリティを提供し、b)1つのノードがダウンした場合のデータ損失に対する保護を強化する1つの方法です。しかし、やはり、NoSQL DB /構成に依存しています。 NoSQLは、あなたが推測するような「データ損失」を必ずしも意味しません。
  • 私見、複雑/動的クエリ/レポートは、RDBMSから最適に提供されます。多くの場合、NoSQL DBのクエリ機能は制限されています。
  • 1または他の選択肢である必要はありません。私の経験では、特定のユースケースでRDBMSをNoSQLと組み合わせて使用​​しています。
  • NoSQL DBには、多くの場合、複数の「テーブル」でアトミック操作を実行する機能がありません。

さまざまな種類のNoSQLストアが何であるか、およびスケーラビリティ/データセキュリティなどを提供する方法を実際に見て理解する必要があります。 。

例としてMongoDbの場合、 ユースケース をチェックして、MongoDbの「適切な」用途と「あまり適合していない」用途として提案されているものを確認してください。

162
AdaTheDev

少なくともこれらのシナリオでは、Nosqlが「より適切」であると思います(より多くの補足を歓迎します)

  1. ノードを追加するだけで簡単に拡張できます。

  2. 大規模なデータセットのクエリ

    毎日Twitterに投稿されている大量のツイートを想像してください。 RDMSには、数百万行(または数十億行)のテーブルが存在する可能性があり、それらのテーブルに対して直接クエリを実行したくはありませんが、ほとんどの場合、テーブル結合は複雑なクエリにも必要です。

  3. ディスクI/Oのボトルネック

    Webサイトがユーザーのリアルタイム情報に基づいて異なるユーザーに結果を送信する必要がある場合、1秒あたり数万または数十万のSQL読み取り/書き込み要求について話している可能性があります。その場合、ディスクI/Oが深刻なボトルネックになります。

9
otm