32台のサーバーで実行されている大規模なデータベースアプリケーションを書き直す必要があります。ハードウェアは最新であり、各マシンには2つのクアッドコアXeonと32GバイトのRAMが搭載されています。
データベースはマルチテナントであり、各顧客はそれぞれ約5〜10ギガバイトの独自のファイルを持っています。このハードウェアで約50のデータベースを実行しています。アプリはウェブに公開されているので、負荷を制御することはできません。本当に複雑なクエリはないので、より良い解決策があればSQLは必要ありません。
データベースは、毎日深夜にFTP経由で更新されます。データベースは読み取り専用です。C#は私のお気に入りの言語であり、ASP.NETMVCを使用したいと思います。
私は次のオプションについて考えました:
SQL Server 2012を実行している2つの大きなSQLサーバーを使用して、32台のサーバーにデータを提供します。RESTサービスを提供するIISホスティングを実行している32台のサーバー。
データベースを非正規化し、各WebサーバーでRedisを使用します。BooksleeveをRedisクライアントとして使用します。
SQLServerとRedisを組み合わせて使用する
SQLServer2012をHadoopと一緒に使用する
SQLServerなしでHadoopを使用する
保守性を失うことなく最高のパフォーマンスを得るには、読み取り専用データベースの最良の方法は何ですか?そのようなシナリオでは、Map-Reduceはまったく意味がありますか?
書き直しの理由は、ISAMテクノロジを使用してC ++で記述された古いアプリが遅すぎること、インターフェイスが古風であり、特にajaxを使用している場合にWebサイトから使用するのが適切でないことです。
このアプリは、多くのテーブルを持つリレーショナルデータモデルを使用しますが、すべてのクエリを実行できる1つのアクセラレータテーブルを作成することができ、他のテーブルからの他のすべての情報は、単純なキールックアップによって可能になります。