NoSQLの使用例シナリオまたはNoSQLを使用するWHEN [終了]


252

すべての誇大広告では、これをいつ使用するかについて信頼できる情報を見つけるのは本当に難しいようです。それで、私は以下の質問をします、そして、これらが本当に本当に馬鹿げた質問であるならば、申し訳ありません:

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

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

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

ありがとう!

回答:


183

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

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

さまざまな種類のNoSQLストアとは何か、スケーラビリティ/データセキュリティなどを提供する方法については、実際に見て理解する必要があります。これらはすべてまったく異なるため、全体的に異なる答えを出すことは困難です。 。

MongoDbの例として、MongoDbの「適切な」使用方法と「あまり適していない」使用方法として彼らが提案していることを確認するには、使用例を確認してください


16
NoSQLが結合をサポートしないという主張は誤解を招くものです。一部のNoSQLデータベースは、実際にはリレーショナルデータベースよりも結合がはるかに優れています。一部はまったくサポートしていません。この答えは、一般的にNoSQLについてではなく、特にMongoDBについてのようです。
アランプラム

1
素晴らしい要約。@AlanPlum、あなたはどの特定のNoSQLデータベースを参照していますか?
ブライアン、2016年

2
@brian私はArangoDB(arangodb.com)のコントリビューターです。ArangoDB はドキュメントデータベース(MongoDBなど)とグラフデータベース(Neo4Jなど)を組み合わせたもので、安価な結合だけでなく実際のトランザクションも含まれます。とはいえ、NoSQLデータベースは同種のグループではなく、1つのNoSQLデータベースから「カテゴリ」全体に一般化することは不可能です。
アランプラム、

NoSQLでは「結合はサポートされていない」ため、RDBの使用を検討している場合は、AWS re:Inventのこのビデオを視聴することを強くお勧めします。NoSQLアプローチ全体を分解します。私を大いに助けてくれました。youtu.be/HaEPXoXVf2k
dillon.harless

9

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

  1. ノードを追加するだけで簡単に水平方向にスケーリングできます。

  2. 大きなデータセットに対するクエリ

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

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

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


20
#2のRDBMSで何が問題になるのか理解できません。そしてNoSQLは#3のように少ないディスクI / Oを持っていますか?
avi 2014年

5
@aviが言うように、インデックスでテーブルをクエリする限り、#2には問題はないと思います。何百万行?わかりました、使用したいインデックスのみを取得します
Xtreme Biker 2015年

11
#2と3はどちらも偽です。2については、データのインポート/エクスポートでパフォーマンステストを実行し、SQL Server 2014が大規模なデータのインポートとエクスポートでMongoをクラッシュさせるのを見ました。3の場合、SQLで強く型付けされたデータは、通常、ドキュメントデータベースよりもはるかに少ないスペースしか使用しません(圧縮前に50%以上確認しました)。
ブライアン、2016年

7
ええ、そして#1でさえ、私はそれを取得しません。スケールアップは、すべての主要なRDBMSが提案するクラスタリング契約の一部です
Sebas

2
無制限のお金がある場合、これら3つすべてが間違っています
Chazt3n
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.