11

キューの深さnに関して、キューからメッセージを消費するときにJMSセレクターを適用するアルゴリズムの時間計算量はどれくらいですか?特に、読み取りごとに線形(O(n))ですか?これは(JMSプロバイダーに)実装に依存しますか?また、要求されているフィールドに依存しますか?

(実装に依存する場合、私はWebsphere MQとSolaceの動作に特に興味がありますが、特に複雑さを説明するドキュメントへのリンクがある場合は、特定のJMSプロバイダーを扱う回答を歓迎します!)

動機:各メッセージには、aninvocationIDとaの2つのプロパティがありbatchNameます。バッチは、いくつかの呼び出しで構成されます。クライアントは、2つの方法のいずれかでメッセージを消費したいと考えています。によってinvocationIDまたはによってbatchName。メッセージが作成された時点では、どの方法でメッセージが消費されるのかわかりません。 

これは、セレクターを介して実装できます。

invocationID=42

または

batchName="reconciliation"

...カスタムプロパティの代わりに相関IDを使用することで、これらの1つを高速化できますが、もう1つは低速のままになるのではないかと心配しています。

4

3 に答える 3

3

ドキュメントによると、メッセージは順番に検索されます。ただし、WMQはフィールドMessageIDCorrelIDフィールドにインデックスを付けます。インフォセンターでは、動作を次のように説明しています。

キューからメッセージを選択するには、WebSphereMQがキュー上の各メッセージを順次検査する必要があります。メッセージは、選択基準に一致するメッセージが見つかるか、検査するメッセージがなくなるまで検査されます。したがって、メッセージ選択がディープキューで使用されると、メッセージングのパフォーマンスが低下します。

選択がJMSCorrelationIDまたはJMSMessageIDに基づいている場合にディープキューでのメッセージ選択を最適化するには、JMSCorrelationID=...またはJMSMessageID=...の形式の選択文字列を使用し、1つのプロパティのみを参照します。

このメソッドは、JMSCorrelationIDでの選択のパフォーマンスを大幅に向上させ、JMSMessageIDのパフォーマンスをわずかに向上させます。

キューを多重化するための要件についてもっと理解したいと思います。複雑なセレクターは、すべての実装のパフォーマンスに影響を与えます。より単純なセレクターで複数の開いているハンドルを使用する代替手段は、複数のキューを使用する場合とアプリコードに違いはありません。もちろん、WMQの場合、動的キューまたは永続的に定義された多くのキューはまったく問題ありません。この要件をよく目にするのは、他の特定のトランスポートを使用したショップで、多くのキューが定義された状態でパフォーマンスが大幅に低下し、これがWMQにも当てはまるという前提があります。その他の場合、要件はPub/Subおよび永続サブスクリプションで満たされています。私は、この要件に有効なケースがないことを示唆しているのではなく、何がそれを推進しているのか疑問に思っています。

于 2012-11-20T04:12:29.143 に答える
2

それはすべて実装に依存します。多くのJMSプロバイダーはメッセージをSQLデータベースに格納するため、セレクターの実装にSQLを使用できます。この場合、特定のケースがSQLにどのようにマッピングされているかを確認する必要があります。

WebSphereMQに関しては、セレクターの実装はとのO(log n)ですがJMSMessageID = sthJMSCorrelationID = sthその他の場合、私は特定の知識を持っていません。経験上、O(n)のように見えます。

于 2012-11-19T00:25:29.643 に答える
1

WebSphere MQバージョン7では、セレクターの実装が変更されました。v7JMSクライアントとv7QueueManagerを使用すると、選択処理はQueueManager側で実行されます。v6 JMSクライアント(または実際にはその移行で動作しているv7クライアント)モードでは、すべてのメッセージがクライアントに渡されて処理されます。一致するメッセージのヒット率が低い場合、多くの無駄な労力がありました。それで

v7では、処理はQueueManager側で行われるため、一致するメッセージのみがクライアントに送信されます。

QueueManagerは、データベースのようにメッセージプロパティの複雑なインデックスを維持しないことに注意してください。したがって、セレクターは単純な方が優れています。

于 2012-11-19T16:03:52.433 に答える