一回は実行時間を短縮する方法、データの定期的な多数のタスクを処理する集中しますか?

著者:シェン建58

要約問題:
(1)利用者の会員制度、
(2)利用者が水のスコアを持っていますが、月の統計的な割合を行い、異なるメンバーのグレードスコアのためのさまざまなビジネスプロセスをやって、
データの仮定:
一回は実行時間を短縮する方法、データの定期的な多数のタスクを処理する集中しますか?

(1)ユーザーがレベルを100Wと仮定し、
(2)100Wレベルに流れるデータ量を増加させる手段水の毎日のユーザーを想定し、3kWの、水と3ヶ月間億のレベルのデータ量の新しい毎月の水位。
一般的な解決策:
タイミングタスク、一度各月の最初の日を使用しています。

//(1)查询出所有用户
uids[] = select uid from t_user;
//(2)遍历每个用户
foreach $uid in uids[]{
         //(3)查询用户3个月内分数流水
        scores[]= select score from t_flow
                  where uid=$uid and time=[3个月内];
         //(4)遍历分数流水
        foreach $score in scores[]{
                   //(5)计算总分数
                  sum+= $score;
        }
         //(6)根据分数做业务处理
        switch(sum)
        升级降级,发优惠券,发奖励;
}

月に一度定期的なタスクを実行するために、どのような問題が存在しますか?
処理されたデータの計算コスト、大量の水の友人によると、長い時間がかかる、と言う1~2日必要です。
VO:100Wレベルのユーザアウターループ、内部ループ9KW水位、ビジネスプロセスは、複数のデータベース10の相互作用を必要とします。
マルチスレッド並列処理することができますか?
これは、ユーザごとに処理パイプラインに結合されていないことができます。
ユーザ分割に応じて、例えば、マルチスレッド並列処理に変更し、どのような問題が存在?
各スレッドは運ばない可能性が高い業務処理、データベースを実行するデータベースにアクセスする必要があります。
最適化の方向、このような問題がある:
(1)同一のデータが繰り返される計算の数を減少させる;
(2)共有CPU時間、むしろ焦点よりも、分散処理を試みる
;(3)の計算単一トランザクションの量を減らす
同じを低減する方法データをコピーし、ダブルカウント?
一回は実行時間を短縮する方法、データの定期的な多数のタスクを処理する集中しますか?

上記、各正方形は、データフローが1ヶ月(約3kWの)の一部であると仮定されます。

照会し、三月の終わりを計算し、計算1〜3月で、2月、9KWデータ3ヶ月すると、
4月の終わりの計算、3ヶ月間2月、3月、4月中に9KWデータを照会して計算するために、
...
意志を見つけ、2〜3月のデータ(ピンク部分)は、クエリおよび計算が何度も繰り返されます。
ボイスオーバー:ビジネス、月次データは3回計算されます。
月額新しい月次概要不可欠な水が唯一の増分を計算されます。
flow_month_sumは(月ザ・、UID、flow_sum)は、
(a)は毎月、月のスコアは、3分の1に低減されたデータの量をカウント、時間がかかるだけでなく、1に削減; / 3
(2)同時に、水の最初の2ヶ月を加え、あなたは合計スコアの最後の3ヶ月を取得することができます(このアクションはほとんどの時間を費やしていない);
ナレーション:大きさとユーザーテーブルの同じ順序データ量テーブル、100ワットレベル。
その結果、水の各フラクションは一度だけカウントされます。
それはデータの量に単一のコンピューティングを減らし、CPU時間を共有するには?
ビジネス需要が再び得点をするために月に一度計算されますが、中央集権月コンピューティングは、データの量が多すぎると、時間がかかりすぎて長く、毎日の計算に配分することができます。
一回は実行時間を短縮する方法、データの定期的な多数のタスクを処理する集中しますか?

上記のように、不可欠な水ヶ月の要約、アップグレードされた、一体型の水毎日集計テーブル。
濃度が30回、算出したデータ量の1/30まで低下するたびに、月に一度計算分散計算のために評価され、それが唯一のプロセスには数分かかります。
一度も毎時間計算され、データ量のすべての計算は1/24に低減することができ、それぞれの時間は、それだけに対処するためには数分かかります。

時間の短縮が、それは、時限タスクですが、水、それをリアルタイムスコアで計算することができないのですか?
あなたは、コンピューティング、リアルタイムに蓄積することができ、水1日に100ワットのスコアを追加し、「一体型水、毎日の要約を。」
一回は実行時間を短縮する方法、データの定期的な多数のタスクを処理する集中しますか?

使用DTS(または運河)水の割合は、リスナテーブル、一度時間ミッションが均一に「常時」に割り当てられたコンピューティングのユーザがリアルタイムでスコア、累積水毎日のスコアを変更し、タイミング、新しい毎日を増加します100ワットを完全に移動し、データベースを、第2の書き込み圧力あたり10回流水。
ナレーター:あなたがDTS /運河を使用できない場合は、MQを使用することができます。

要約、時限タスク処理時間集中データのような多数のために、最適化の考え方は:
(1)同一のデータが繰り返される計算の数を減らすために、
ではなく、(2)共有CPU時間、(でもリアルタイムに)分散処理を試みます集中処理;
(3)データの単一のコンピューティングの量を減らし、
私は結論よりも重要なのは、アイデアをあなたにいくつかのインスピレーションを願っています。

最後に、
私たちは、ヨーヨーは、物品、支援への感謝を覚えている賞賛のポイントのように、交換を歓迎します!

おすすめ

転載: blog.51cto.com/14442094/2430251
おすすめ