単純なASP.NETMVCWebアプリをSQLからRavenDBに移植し始めました。SQLの方がRavenDBよりもページが速いことに気づきました。
Miniprofilerでドリルダウンすると、原因はセッションにかかる時間のようです:session.SaveChanges(150-220ms)。RavenDBに保存するためのコードは次のようになります。
var btime = new TimeData() { Time1 = DateTime.Now, TheDay = new DateTime(2012, 4, 3), UserId = 76 };
session.Store(btime);
session.SaveChanges();
認証モード:RavenDBがサービスとして実行されている場合、「Windows認証」を使用していると想定します。IISアプリケーションとして展開するときは、デフォルトの「Windows認証」を使用しました。
背景:データベースマシンは、Webサーバーとして機能する開発マシンとは別のものです。データベースは同じデータベースマシンで実行されています。テストデータは非常に小さく、たとえば100行です。クエリは、サイズが48バイトの12個のプロパティを持つオブジェクトを返すだけです。fiddlerを使用してRavenDBに対してWCATテストを実行すると、データベースマシンでの使用率が高くなり(SQLと比較して)、ページ数がはるかに少なくなりました。RavenをサービスおよびIISアプリケーションとして実行しようとしましたが、目立った違いは見られませんでした。
編集
a)自分のマシンの1つ、またはb)作成したソリューションに問題がないことを確認したかったのです。そこで、Michael Friisによって作成された別のソリューションであるRavenDNサンプルアプリを使用してAppharborでテストし、そのソリューションにMiniprofilerを追加することにしました。MichaelはApharborの素晴らしい人物の1人であり、見たい場合はここからコードをダウンロードできます。
Appharborの結果
ここで試すことができます(今のところ):
読み取り:(7〜12ミリ秒、100 +ミリ秒でいくつかの外れ値)。
書き込み/保存:(197-312ms)*保存するのに長い時間がかかります*。保存をテストするには、新しい「もの」を作成して保存します。アプリケーションがウォームアップするため、最初の1つは通常時間がかかるため、少なくとも2回実行することをお勧めします。
両方が何か間違ったことをしているのでない限り、RavenDBの保存は非常に遅く、読み取りよりも保存が約10〜20倍遅くなります。非同期でインデックスを再作成することを考えると、これは非常に遅いようです。
それをスピードアップする方法はありますか、それともこれは予想されることですか?