JavaScriptベースのWebアプリケーションをいくつか実行しています。各アプリケーションは、使用イベントログ(さまざまなクリックイベントの記録)を作成します。私はasp.netのWeb APIを使用してSQLデータベースにこれらのすべてのイベントを記録したい。データベースにイベントログを格納するためのキューを持つAsp.net Web API
- を各メッセージには、4-5のプロパティ(名前、eventTypeを、AppIDを、ペイロードは、ユーザーID)を持つことになります。ここでは
は考慮すべき重要なポイントです。ペイロードはJSON形式のオブジェクトです。これにより、データベースにオブジェクトを文字列形式で格納することができます
- ピークロード時にユーザーが毎分1000-1500メッセージを送信することを期待しています。
- 私は一度エンドポイントがメッセージを受け取ったら、メッセージをキュー&に入れ、MSSQL DBにメッセージを保存します。ここで
は私の質問です:
- それは、クライアント側のメッセージをキューして、20件のメッセージまたはすべての3分後にバッチでイベントを送信することは理にかなってい。これにより、ネットワークとWeb APIに余分な負荷がかかりません。
- メッセージサイズを考慮すると、1分あたりのメッセージ数はありません。この場合、メモリキューで使用するのは理にかなっていますか?私は本当に高速のキューを望んでいます&サードパーティのキューソリューションへの依存を避けたいです。メッセージの順序を維持する必要はありません。
- Webサーバーを再起動すると、99%の稼働時間があると考えても問題ありません。
- 複数のコンシューマ(すべて同じことを行う、テーブルにデータを書き込む)、または単一のコンシューマのみが必要ですか。
- 各メッセージの閉じる接続を開くのではなく、SQL接続を開いたままにする方法はありますか。
を挿入あなたは本当にSQL Serverの中で、これを保存したいですか?クエリはそれほど簡単ではないかもしれません。ペイロードはどのようにフォーマットされていますか?あなたはnosqlソリューションを考えましたか?どのプロセスがキューを処理しますか?私は別のプロセスでそれをやります。通常、私はこのようなもののためにAzure EventHubのようなものを使うことを提案します。 –
@PeterBons彼のアプリはすべてJavascriptになっているので、私はGoogle Analyticsを代わりに(イベントベースの)代わりに考えると面白かったです。各イベントラベルのフォーマットは、「時間:ユーザストリング(サニタイズ)」とすることができる。しかし、問題があります。一部の広告ブロッカーはGoogleアナリティクスを完全にブロックします。 – CPHPython
@CPHPython他のオプションは、アプリケーションの洞察、空白のサービスです。無料の階層もあります。とにかく、たくさんのオプション。第三者に制限がある場合は、あまりにも悪いです。 DIYの選択肢がホイールを再発明しているかもしれません。スケーラビリティが問題になっているとき....... –