7

単純な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の結果

ここで試すことができます(今のところ):

  1. 読み取り:(7〜12ミリ秒、100 +ミリ秒でいくつかの外れ値)。

  2. 書き込み/保存:(197-312ms)*保存するのに長い時間がかかります*。保存をテストするには、新しい「もの」を作成して保存します。アプリケーションがウォームアップするため、最初の1つは通常時間がかかるため、少なくとも2回実行することをお勧めします。

両方が何か間違ったことをしているのでない限り、RavenDBの保存は非常に遅く、読み取りよりも保存が約10〜20倍遅くなります。非同期でインデックスを再作成することを考えると、これは非常に遅いようです。

それをスピードアップする方法はありますか、それともこれは予想されることですか?

4

2 に答える 2

3

最初に-AyendeはRavenDBの背後にいる「男」です(彼はそれを書きました)。なぜ彼が質問に答えていないのか私にはわかりませんが、Googleグループでも、彼は一度チャイムを鳴らしていくつかの指摘された質問をするようですが、完全な答えを提供するために戻ってくることはめったにありません。たぶん彼はRavenHQを地面から離すために一生懸命働いていますか?!?

2番目-同様の問題が発生しました。以下は、原因となる可能性のあるGoogleグループに関するディスカッションへのリンクです。

RavenDB認証と401応答

合理的な質問は次のようになります。「これらの推奨事項で問題が解決した場合、RavenDBがそのままでは機能しないのはなぜですか?」または、少なくとも適切な書き込みパフォーマンスを得る方法に関するドキュメントを提供します。

上記のスレッドで行われた提案でしばらく遊んだところ、応答時間が改善されました。しかし、最終的には、十分にテストされているため、MySQLに切り替えました。この問題は、早い段階で(幸運にも)発生し、さらに多くの問題が発生する可能性があるという懸念が生じました。最後に、次のことを行う時間がなかったためです。

  1. RavenDBサーバーで見られたパフォーマンスの問題が修正されたかどうかを完全にテストします
  2. UnsafeAuthenticatedConnectionSharingと事前認証を使用することの影響を調査してテストします。
于 2012-04-23T20:21:20.880 に答える
0

Ayendeの応答を要約すると、実際にはネットワーク遅延と認証チャタリングの合計をテストしています。Joeが指摘したように、認証を最適化しておしゃべりを減らす方法があります。ただし、これは間違いなくセキュリティを低下させます。明らかに、Microsoftは最初にセキュリティを確保し、次にパフォーマンスを向上させるためにセキュリティを構築しました。RavenDBのユーザーは、保護されたサーバー間通信用であるため、デフォルトのセキュリティモデルが堅牢すぎるかどうかを選択できます。

RavenDBは、READ指向であると明確に定義されています。書き込みは完全なACIDでトランザクション処理であるため、読み取りよりも書き込みの方が10〜20倍遅いことは完全に許容されます。

書き込み速度がRavenDBの制限要因である場合、トランザクション境界を適切にモデル化していない可能性があります。RDBMSテーブルの行に類似しすぎて、実際には適切にモデル化されていないドキュメントを保存していること。

編集:質問をもう一度読み、背景のセクションを調べると、RavenDBの最も効率の悪い方法の1つでありながら、SQLServerの最適なシナリオとなるようにテスト条件を明示的に定義します。そのサイズのデータ​​の場合、実際の使用法であれば、ほぼ確実に1つのドキュメントになります。

于 2012-05-21T20:51:33.327 に答える