1

mysql テーブルを使用してジョブの基本的なキューを実装しました。その中のいくつかの項目は残りの項目よりも優先度が低くなります。キューは常に優先度の高いアイテムでいっぱいになるため、優先度の低いアイテムが処理されないことがあります。

私たちの実装では、アイテムをその優先度とともにテーブルに挿入し、キューから次のアイテムを取得するために、次のようにテーブルにクエリを実行します。

SELECT * FROM `queue` ORDER BY `priority` DESC, `created_at` ASC

優先度の低いアイテムがタイムリーに処理されるようにするには、キューをどのようにモデル化する必要がありますか?

編集

通常、キューには 25,000 を超えるアイテムが含まれています。

4

4 に答える 4

1

これを行う古典的な方法は、1 つを選択した直後に、キュー内のすべてのアイテムの優先度を上げることです。このようにして、古くて優先度の低いアイテムは、ある時点で、新しい優先度の高いアイテムを追い越すのに十分な優先度を蓄積します。

のサイクルのようなもの

SELECT * FROM `queue` ORDER BY `priority` DESC, `created_at` ASC LIMIT 1;
-- read selected queue item
DELETE FROM `queue`WHERE <primary key>=<primary key of selected element>;
UPDATE `queue` SET `priority`=`priority`+1;

十分なはずです

于 2013-08-15T11:36:48.047 に答える