0

こんにちは、

Comet を使用してチャット アプリケーションを実装しました。新しいメッセージが到着するまで、リクエストはサーバー上で「ハング」します。その後、新しいメッセージとともにクライアントに戻り、再びサーバーに移動します。

私の問題は次のとおりです。

新しいメッセージを確認するために、600 ミリ秒ごとにデータベースをポーリングします。簡単なクエリ「select...from messages where messageId > ' + lastMessageId.

さらに、プレゼンスを維持するために、各ユーザー「LastKeepAliveTime」でデータベースを非常に(非常に)頻繁に更新します。

SQL Server のトランザクション ログが大きくなり、ある時点でチャット アプリケーションが動作しなくなりました。

チャット ユーザーは登録ユーザーではなく、いつでもページを離れることができるランダム ユーザーです。

ありがとうヤロン

4

3 に答える 3

1

トランザクション ログが制御不能にならないようにする方法は次のとおりです: http://support.microsoft.com/kb/873235

その記事のオプションは次のとおりです。

  • シュリンクをしています。
  • ログサイズの変更。
  • 自動拡張の構成。
  • 復旧モデルの変更。
  • ログファイルを定期的にバックアップします。

もっと。

補足として、アプリケーションの状態にオブジェクトとして保存するユーザーとその最後のアクティビティの日付のリストを設定することは価値があるかもしれません。その方法でアクセスする方が速く、値を保持する頻度を減らすことができます。

于 2009-12-13T01:02:56.617 に答える
1

最後のキープアライブ情報に共通のキャッシュ オブジェクトを使用できますか? 情報の量が少ないようで、多くのSQL更新を回避できます。

于 2009-12-13T01:16:24.157 に答える
0

フル モードのトランザクション ログからシンプル モードに切り替えると、ログの増大の問題が解決するはずです。

ただし、ポーリングはスケーラブルではないため、可能であればポーリングを避けることをお勧めします。Service Broker または を使用してイベント ドリブン モデルに切り替えることを検討してくださいSqlDependency。キープアライブには他のアプローチもあります。

于 2009-12-13T02:30:54.227 に答える