タグ付けされた質問 「queue」

1
Postgres UPDATE…LIMIT 1
サーバーステータス(「アクティブ」、「スタンバイ」など)などのサーバーのクラスターに関する詳細を含むPostgresデータベースがあります。アクティブなサーバーはいつでもスタンバイにフェールオーバーする必要があり、特にどのスタンバイが使用されているかは気にしません。 データベースクエリでスタンバイのステータス(JUST ONE)を変更し、使用するサーバーIPを返すようにします。選択は任意です。サーバーのステータスはクエリによって変化するため、どのスタンバイが選択されているかは関係ありません。 クエリを1つの更新のみに制限することはできますか? ここに私がこれまで持っているものがあります: UPDATE server_info SET status = 'active' WHERE status = 'standby' [[LIMIT 1???]] RETURNING server_ip; Postgresはこれを好まない。別に何ができますか?

2
Postgresがメッセージキューとしてリッスン/通知する
PostgresのListen / Notify機能を使用してメッセージをチャネルに配信し、このメッセージを1人のリスナーのみが消費する方法はありますか? これの目的は、複数の「ワーカー」アプリがすべて同じPostgresチャネルをリッスンしていることです。しかし、通知チャネルを介して受信したメッセージごとに1回だけ作業を行いたいと思います。 Listen / NotifyがPostgresの正しい機能ではない場合、使用すべき別の機能はありますか? 理想的には、追加の拡張機能を使用せずにこれを実行したいと思います。


2
SQL Serverの複数のワーカーのFIFOキューテーブル
次のstackoverflowの質問に答えようとしました: 複数のサーバーアプリケーションインスタンスで個々のテーブル行を処理するには、どのSQL Server 2005/2008ロックアプローチを使用する必要がありますか? やや素朴な答えを投稿した後、私は自分の口がどこにあるかを考え、実際に私が提案しているシナリオをテストしました。まあ、それは思ったよりもはるかに難しいことが判明しました(誰にも驚きはありません、確かです)。 ここで私が試し、考えたことがあります: まず、派生テーブル内でORDER BYを使用して、TOP 1 UPDATEを試しましたROWLOCK, READPAST。これによりデッドロックが発生し、アイテムの順序が狂って処理されました。同じ行を複数回処理しようとすることを必要とするエラーを除いて、可能な限りFIFOに近い必要があります。 私は、その後の様々な組み合わせを使用して、変数に所望の次のキューIDを選択しようとしたREADPAST、UPDLOCK、HOLDLOCK、及びROWLOCK排他的にそのセッションによって更新するための行を保存します。私が試したすべてのバリエーションは、以前と同じ問題に悩まされていましたREADPAST。 READ COMMITTEDまたはREPEATABLE READ分離レベルでのみREADPASTロックを指定できます。 READ COMMITTED であったため、これは混乱を招きました。以前にこれに遭遇したことがあり、イライラします。 この質問を書き始めてから、Remus Rusaniが質問に対する新しい回答を投稿しました。私は彼のリンクされた記事を読んで、彼が破壊的な読み取りを使用していることを確認しました。彼は答えで、「Webコールの間、ロックを保持することは現実的に不可能です」と述べた。更新または削除を行うためにロックが必要なホットスポットとページに関する彼の記事の内容を読んだ後、探していることを行うために正しいロックを実行できたとしても、それはスケーラブルではなく、大規模な並行性を処理しません。 今、どこに行けばいいのかわかりません。行の処理中にロックを維持することはできません(高tpsまたは大規模な同時実行性をサポートしていなくても)。私は何が欠けていますか? 私より賢い人と私より経験のある人が助けてくれることを期待して、私が使用していたテストスクリプトを以下に示します。TOP 1 UPDATEメソッドに切り替えられますが、他のメソッドを残し、コメントアウトしてありますので、あなたもそれを調べたいと思います。 これらをそれぞれ別のセッションに貼り付け、セッション1を実行してから、他のすべてをすばやく実行します。約50秒でテストは終了します。各セッションからのメッセージを見て、どのような作業を行ったか(またはどのように失敗したか)を確認してください。最初のセッションでは、存在するロックと処理中のキューアイテムの詳細を2回目に撮影したスナップショットを含む行セットが表示されます。それは時々機能し、他の時間はまったく機能しません。 セッション1 /* Session 1: Setup and control - Run this session first, then immediately run all other sessions */ IF Object_ID('dbo.Queue', 'U') IS NULL CREATE …

3
並行テーブルベースのキューを実装する最良の方法
MySQLに、処理されるリンクのキューを表すテーブルがあります。リンクは外部アプリによって1つずつ処理され、最後に削除されます。これは大量のキューであり、処理アプリの複数のインスタンスが複数のサーバーに分散しています。 各レコードが1つのアプリのみによって選択されるようにするにはどうすればよいですか?レコードにフラグを付ける/ロックする方法はありますか? 現在、2つ以上が同じリンクを取得しないようにするために、各インスタンスが特定のレコードセット(IDのMODに基づく)のみを取得することを許可していますが、これはキューの処理を増やす透過的な方法ではありません新しいインスタンスを追加するだけでスピードアップ。
10 mysql  queue 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.