多くの NoSQL データベースと SQL データベースに出くわしました。これらのデータベースの長所と短所を測定するさまざまなパラメータがあり、スケーラビリティはその 1 つです。これらのデータベースの水平スケーリングと垂直スケーリングの違いは何ですか?
10 に答える
水平スケーリングとは、リソースのプールにマシンを追加してスケーリングすることを意味し、垂直スケーリングとは、既存のマシンに処理能力 (CPU、RAM) を追加してスケーリングすることを意味します。
これを覚える簡単な方法は、サーバー ラック上のマシンを考えることです。水平方向にマシンを追加し、垂直方向にマシンにリソースを追加します。
データベースの世界では、水平スケーリングは多くの場合、データの分割に基づいています。つまり、各ノードにはデータの一部しか含まれていません。垂直スケーリングでは、データは単一のノードに存在し、マルチコアを介してスケーリングが行われます。つまり、負荷が分散されます。そのマシンの CPU と RAM リソースの間。
水平スケーリングでは、多くの場合、既存のプールにマシンを追加することで動的にスケーリングする方が簡単です。垂直スケーリングは、多くの場合、1 台のマシンの容量に制限されます。その容量を超えてスケーリングすると、多くの場合、ダウンタイムが発生し、上限が生じます。
水平方向のスケーリングの良い例は、Cassandra、MongoDB、Google Cloud Spanner .. であり、垂直方向のスケーリングの良い例は、MySQL - Amazon RDS (MySQL のクラウド バージョン) です。小型マシンから大型マシンに切り替えることで、垂直方向に簡単にスケーリングできます。多くの場合、このプロセスにはダウンタイムが伴います。
GigaSpaces XAP、Coherenceなどのインメモリ データ グリッドは、ディスクにバインドされていないという理由だけで、水平方向と垂直方向の両方のスケーリングに対して最適化されることがよくあります。パーティショニングによる水平スケーリングと、マルチコア サポートによる垂直スケーリング。
この件については、私の以前の投稿で詳しく読むことができます: スケールアウトとスケールアップ、およびNOSQL 代替手段の背後にある共通の原則
言及されていない追加のアーキテクチャがあります - SQL ベースのデータベース サービスは、複雑な手動シャーディングなしで水平方向のスケーリングを可能にします。これらのサービスはバックグラウンドでシャーディングを行うため、MongoDB や CouchDB などの NoSQL エンジンと同様に、従来の SQL データベースを実行してスケールアウトできます。私がよく知っている 2 つのサービスは、EnterpriseDB for PostgreSQL とXeround for MySQL です。Xeround による詳細な投稿を見ました。SQL データベースでのスケールアウトが難しい理由と、スケールアウトのやり方が異なる方法について説明しています。これはベンダーの投稿であるため、大まかに扱ってください。ウィキペディアのクラウド データベース エントリもご覧ください。には、SQL と NoSQL、サービスとセルフホストの優れた説明、各組み合わせのベンダーとスケーリング オプションのリストがあります。;)
はい、水平方向のスケーリングはマシンを追加することを意味しますが、マシンがクラスター内で同等であることも意味します。MySQL は、レプリカを使用してデータの読み取りに関して水平方向にスケーリングできますが、サーバーのメモリ/ディスクの容量に達すると、サーバー間でデータのシャーディングを開始する必要があります。これはますます複雑になります。多くの場合、レプリケーション速度が遅すぎてデータの変更速度に追いつかないため、レプリカ間でデータの一貫性を維持することが問題になります。
Couchbase は素晴らしい NoSQL 水平スケーリング データベースでもあり、多くの商用高可用性アプリケーションやゲームで使用されており、間違いなくこのカテゴリで最高のパフォーマンスを発揮します。クラスター間でデータを自動的に分割し、ノードの追加は簡単で、コモディティ ハードウェアや安価な VM インスタンスを使用できます (たとえば、AWS では High Mem の代わりに High Disk マシンを使用します)。Membase (Memcached) から構築されていますが、永続性が追加されています。また、Couchbase の場合、すべてのノードが読み取りと書き込みを行うことができ、クラスター内で同等であり、フェイルオーバー レプリケーションのみが使用されます (mySQL のようにすべてのサーバーにまたがる完全なデータセット レプリケーションではありません)。
パフォーマンスに関しては、優れた Cisco ベンチマークを見ることができます: http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server
Couchbase アーキテクチャに関する素晴らしいブログ投稿はこちらです: http://horicky.blogspot.com/2012/07/couchbase-architecture.html
従来のリレーショナル データベースは、クライアント/サーバー データベース システムとして設計されていました。それらは水平方向にスケーリングできますが、そのプロセスは複雑でエラーが発生しやすい傾向があります。NuoDB のような NewSQL データベースは、従来の RDBMS の SQL/ACID プロパティを維持しながら、水平方向にスケールアウトするように設計されたメモリ中心の分散データベース システムです。
NuoDB の詳細については、テクニカル ホワイト ペーパーを参照してください。
Oracle や db2 などの SQL データベースは、共有ディスク クラスターによる水平スケーリングもサポートしています。たとえば、Oracle RAC、IBM DB2 purescale、Sybase ASE Cluster エディションなどです。新しいノードを Oracle RAC システムまたは DB2 purescale システムに追加して、水平スケーリングを実現できます。
ただし、このアプローチは noSQL データベース (mongodb、CouchDB、IBM Cloudant など) とは異なり、データ シャーディングが水平スケーリングの一部ではないという点です。noSQL データベースでは、データは水平スケーリング中に細分化されます。