NoSQLの長所と短所について説明している テクニカルブログ で次のテキストを読んだ
"何年もの間、データベースサーバーのパフォーマンスを改善するために、データベース管理者は、データベースの負荷が増加する(スケールアップする)代わりに、より大きなサーバーを購入する必要がありました。負荷の増加(スケールアウト)に応じてデータベースを複数の「ホスト」に分散します。RDBMSは通常、簡単にスケールアウトしませんが、新しいNoSQLデータベースは実際に簡単に拡張して新しいノードを利用できるように設計されており、通常は低コストで設計されています商品ハードウェアを念頭に置いています。 "
RDBMSとNoSQLのスケーラビリティについて混乱しました。
私の混乱は:
RDBMSにはACID( http://en.wikipedia.org/wiki/ACID )があり、トランザクションをサポートしています。これらの概念のため、RDBMSを使用したスケールアウトは実装が困難です。
NoSQLソリューションは通常、レコードレベルの原子性を提供しますが、一連の操作が成功することを保証できません(トランザクション)。
データの整合性を維持し、トランザクションをサポートするために、マルチサーバーRDBMSには、可能なすべてのトランザクションと書き込みを同期し、デッドロックを防止/処理するための高速バックエンド通信チャネルが必要です。
このため、通常は1つのマスター(ライター)と複数のスレーブ(リーダー)しか表示されません。
したがって、私は自分自身がNoSQLとRDBMSの関係で本当の利益を把握しようと努めてきましたが、常にそれを完全にカットしない応答で終わることになります。私の検索では、NoSQLとSQLの間に2つの主な違いがあり、真の利点は1つだけです。
ACID vs BASE-通常、NoSQLはSQLのACID機能の一部を省略します。この抽象化の層をプログラマに任せることで、パフォーマンスを向上させることができます。これは、以前のポスターですでにカバーされています。
水平スケーリング-NoSQLの本当の利点は、水平スケーリング、つまりシャーディングです。 NoSQLの「ドキュメント」は一種の「自己完結型」オブジェクトであるため、リレーショナルモデルの場合のように、複数のサーバーの行を結合することを心配することなく、オブジェクトを異なるサーバーに配置できます。
次のようなオブジェクトを返したいとしましょう:
post {
id: 1
title: 'My post'
content: 'The content'
comments: {
comment: {
id: 1
}
comment: {
id: 2
}
...
views: {
view: {
user: 1
}
view: {
user: 2
}
...
}
}
NoSQLでは、そのオブジェクトは基本的にそのまま格納されるため、他のDBサーバーに存在する可能性のある他のテーブルのデータと結合する必要なく、一種の自己完結型オブジェクトとして単一のサーバーに存在できます。
ただし、リレーショナルDBの場合、投稿はcomments
テーブルからのコメントだけでなく、views
テーブルからのビューとも結合する必要があります。これはSQL〜UNTIL〜では問題になりません。DBがシャードに分割されます。この場合、「コメント1」が1つのDBサーバー上にあり、「コメント2」が別のDBサーバー上にある可能性があります。これにより、NoSQL DB内よりも水平方向にスケーリングされたRDBMS内でまったく同じオブジェクトを作成することがはるかに困難になります。
そこにいるDBの専門家はこれらの点を確認または議論しますか?
一般的なRDBMSは、一貫性について強力な保証を行います。これには、トランザクションごとにノード間の通信をある程度拡張する必要があります。ノード数が増えると通信量も増えるため、スケールアウトの機能が制限されます
NoSqlシステムは、さまざまなトレードオフを行います。たとえば、2番目のセッションが最初のセッションによってコミットされたデータをすぐに表示することは保証されません。これにより、一部のデータを格納するトランザクションを、すべてのユーザーがそのデータを使用できるようにするプロセスから分離します。 Googleは「結果的に一貫性がある」。したがって、単一のトランザクションはノード間通信を待つ必要はありません(またははるかに少ない)。したがって、大量のノードをはるかに簡単に利用できます。
RDBMSでは、データが巨大になると、テーブルが複数のシステムに分散し、その場合、JOINなどの操作の実行が非常に遅くなることがあります。
NoSQLの場合、一般に、関連データは同じマシンに一緒に格納されます(単一のドキュメント-ドキュメント指向データベース、またはワイドカラムデータストアの場合、関連する列は同じマシンにあります)。したがって、多数のローエンドマシンで簡単にスケールアウトできます。この場合、明らかに、この場合、RDBMSの場合とは異なり、複数の場所でデータが重複します。