私はRSSフィードを今週再生しています。私の次のトリックでは、私たちの内部アプリケーションログ用にビルドしたいと思っています。無数のバッチおよびイントラネットアプリケーションがログメッセージを投稿するために使用する集中データベーステーブルがあります。この表からRSSフィードを作成したいのですが、ボリュームを処理する方法がわかりません。通常の日でも1日あたり何百ものエントリが存在する可能性があります。例外的なメイク・バイ・ウィズ・ツー・バイ・イット・トゥ・ザ・タイプの日は数千人に見えるかもしれません。何かご意見は?大きな/忙しいRSSフィードを構築する方法
答えて
アプリケーションを知らなくても、具体的なアドバイスはできません。
つまり、この種のシステムでは、ある程度の重大度を持つことが一般的です。重大度を指定するURLの最後に付けるクエリ文字列パラメータを使用できます。 "DEBUG"に設定されていると、どんなに簡単でもすべてのイベントが表示されます。それを「致命的」に設定すると、「システム障害」の大きさのイベントしか表示されません。
まだイベントが多すぎる場合は、イベントをある種のカテゴリシステムに細分することができます。繰り返しますが、これをクエリ文字列パラメータとして使用します。
これで、さまざまなカテゴリと重大度のRSSフィードを複数作成できます。これにより、許容レベルに達したアラートのレベルを調整することができます。
さて、私はこれをどのように処理するかを決めました。私は、各列にタイムスタンプフィールドを使用しており、1日ごとにグループ化しています。もちろん、そこに完全なタイムスタンプがあり、私はグループ内から表示するログメッセージをどのように選ぶかについて半知的である必要がありますが、あまりにも悪くはありません。さらに、監視するアプリケーションを選択し、特定の日からすべてのメッセージ(最大50件)を表示できるようにするために構築しています。
それは私を妥当なものにします。
もっと一般的な質問には良い答えが期待されます。「メッセージが欠落している場所で、多くの重要なメッセージをどのようにシンジケートしますか」
あなたが見逃してはならない通知システムを構築している場合は、pub-subメカニズム(XMPP、ApacheMQでサポートされている他のプロトコルの1つ、または同様のものを使用)がシンジケーションメカニズムより適しています。消費者が通知を見逃さないように、通知を生成しているシステムと消費しているシステムの間の結合の尺度が必要です。
(これはトランスポート形式としてRSSまたはAtomを使用できますが、一般的な使用例ではないため、コンシューマに基づいて表示された通知とこれまでに見た通知を変更する必要があります)
このケースでは、管理者のダッシュボードの数が増えています。今日どのくらいの作業がサポートされているのか、今すぐログに記録されているものがあります。バッチジョブを一晩中実行する
私はを定期的に再生し、(あなたが簡単にこれらの数千人にサービスを提供することができます)フィード静的ファイルになるだろう。その後、2分の1を下回る必要はなく、数分で実行することもできるため、より幅広い選択肢があります。そして、ユーザーはまだ完璧なダウンロード速度と合理的な更新速度を取得します。
私は可能な限りフィードを分割し、ユーザーが希望どおりにそれらを再結合できるようにしました。もし私がそれをやっていたら、おそらくDjangoとシンジケーションフレームワークの使用について考えるでしょう。
Djangoのモデルでは、気になるテーブルのデータ構造を表すことができます。
URLは、r'/rss/(?(\w*?)/)+'
のようにすべてキャッチすることができます(これはうまくいくかもしれませんが、今はテストできないので完璧ではないかもしれません)。
あなたが(例えば、URLの自動リンクを解除するために編集した)のようなURLを使用することができたの方法:
- ます。http:// feedserver/RSS /バッチファイル出力/
- のhttp://feedserver/RSS /支持チケット/
- のhttp:// feedserver/RSS /バッチファイル出力/支持チケット/(一つに合わせた最初の二つの両方)
そしてビューで:
def get_batch_file_messages():
# Grab all the recent batch files messages here.
# Maybe cache the result and only regenerate every so often.
# Other feed functions here.
feed_mapping = { 'batch-file-output': get_batch_file_messages, }
def rss(request, *args):
items_to_display = []
for feed in args:
items_to_display += feed_mapping[feed]()
# Processing/returning the feed.
個々の連鎖可能なフィードを持つということは、ユーザーが一度に1つのフィードを購読したり、気になるフィードを1つの大きなフィードにマージできることを意味します。読んだ方が簡単なものであれ、何でもできます。
私はボリュームがあることを理解していますが、この質問から特別な方法で処理する必要がある理由を理解できていませんか?あなたはそのテーブルのヒット数を減らし、飼料消費者のためのユーザーのエクササイズを向上させようとしていますか? – busse