通常、データベース サーバーは、垂直方向のスケーリングが唯一のオプションであるため、購入する必要がある最大かつ最も高価なボックスです。水平方向 (つまり、複数のコモディティ マシン間) に適切にスケーリングできるデータベースはありますか? また、このアプローチの制限は何ですか?
13 に答える
すべての Oracle インスタンスが同じデータ ストレージを共有するため、Oracle RAC は水平方向にスケーラブルではありません。はい、SAN を使用すると大規模な DB を取得できますが、スケーラブルではありません。つまり、Oracle RAC は依然としてスケールアップ アプローチです。したがって、スケールアウトまたは水平方向のスケーリングでは、関数ごとにデータを分割する必要があります。これは、異なるデータベースに異なるテーブル グループを配置することを意味します。または、テーブルごとにデータを分割します。つまり、1 つのテーブルを同じスキーマを持つ複数のサブテーブルに分割しますが、異なるデータベースに格納します。このようにして、スケールアウト ソリューションが得られます。それには多くのリソースがあります。シャーディングは、Web 2.0 Web サイト アーキテクチャのブログ領域でしばらくの間流行語でした。シャーディングはデータベース自体では直接サポートされていないため、独自のソリューションを構築する必要があります。しかし、私が言ったように、すでに多くの教訓があります。Oracle の場合、テーブルの分割が可能です。mysqlの場合、この質問を確認してください
Oracle RAC -- Real Application Clusters
これはうまく機能します。クラスターにボックスを追加するだけです。あるボックスから別のボックスにフェイルオーバーできます。これは複製ではなく、すべてのボックスが同じ論理ユニットの一部です。
もちろん、かなりの出費です。
心配する必要はありません。良い解決策がすぐに見つかります。
CouchdbとHypertableはオープン ソースであり、まだアルファ版ですが、コモディティ ソフトウェアのスケーリングを簡単にするように設計されていることは明らかです。それらは非常にうまく機能し、データベースに対する考え方を変えるかもしれません。
また、配布を誰かに任せてもよければ、Google AppEngineとAmazon SimpleDBは非常に安価な分散データベース サービスですが、どちらも現在ベータ版であるため、厳しい制限が課せられています。
RAC ルートをたどる場合は、水平方向に永遠にスケーリングするわけではないことを覚えておく価値があります。営業担当者でさえ、RAC の顧客の 90% が 4 ノード以下であることを認めています。それ以上になると、リターンが減少します。したがって、 rac はうまくいくかもしれませんが、それが答えであるとは限りません。
MySQL: http://www.mysql.com/why-mysql/scaleout.html
制限は、ほとんどが読み取りのワークロードで最適に機能することです。通常、すべての書き込みを受け取る 1 つの「マスター」と、書き込みを複製する多数の「スレーブ」があります。次に、読み取りをすべてのデータベースに分散します。
MySQL のレプリケーションは非同期であるため、おそらくタイム ラグの問題に対処する必要があります (マスターに書き込み、書き込みがレプリケートされる前にスレーブから読み取る)。
オブジェクトへの高度にスケーラブルで高速かつ安全なアクセスを提供する JavaSpaces (または Gigaspaces などの商用実装) などのストレージ技術があります。
同様のアプローチを提供する memcached などの分散キャッシュ システムもあります。
もちろん、どちらも真のデータベースではありませんが、適切なアーキテクチャがあれば、データベースと連携して大きな水平スケーラビリティを提供できるものです。本当の問題は、データベースに付属するすべての ACID の利点が必要な場合、避けられないパフォーマンスの低下が発生することです。唯一の解決策は、ACID を必要としないビットを見つけ出し、他のテクノロジを使用してそれらのビットを処理することです。
Oracle RAC はデータベースのロールス ロイスであり、余分なハードウェア ノードを比較的簡単に追加し、ハードウェアのフェイルオーバーを可能にします。
ただし、コモディティ ハードウェアのコストは、ライセンス コストよりも小さくなります。
水平方向のスケーリングが必要だと感じるのはなぜですか。40 GB の RAM と SAN ストレージを備えたマルチ CPU コア サーバーは、非常に大規模な DB インストールをサポートできます。
問題をよりよく理解できるように、サイジングと予想されるアクティビティの情報を提供できますか?
Netezzaやその他のデータ ウェアハウス アプライアンスはこのようにスケーリングしますが、OLTP や Web アプリのワークロードには適していません。
複数のマシンにわたってスケーリングするための Oracle ルートは、Real Application Clusters (Oracle RAC) と呼ばれます。これに関するドキュメントは他にもあります。http://www.oracle.com/database/rac_home.htmlから始めてみてください。
OracleRealApplicationClusters。最高のものが必要な場合は、それを見てください。
まともなマルチコアの「ビッグ アイアン」ボックスを拡張することを真剣に考えている場合は、データのパーティショニングを検討します。これは、データベースに依存しない優れたスケールアウト方法です。
水平方向のすべてのデータベースは、深刻なコストがかかります。
問題を解決するための大金がない限り、RAC のことは忘れてください。非常に優れていますが、2 ノードを超えてスケーリングすると非常に高価になります。
OLAP 用の DashDB を見ることができます。IBM は、それを OLTP 用の Cloudant と組み合わせています。 https://www.ibm.com/developerworks/community/blogs/5things/entry/5_things_to_know_about_dashdb_placeholder?lang=en