1

ユーザーがアクセスするサービスへの依存関係をモデル化しようとしています。「サービス」がコンポーネント 1 に依存し、コンポーネント 2 に依存するなど、依存関係のタイプ (完全または部分的など) を設定する親子隣接リスト スタイル テーブルを作成しました。

この画像はレイアウトを示しています - 依存関係の画像

ここに画像の説明を入力

コンプ 1 と 9 は、失敗するとサービス全体が失敗するため、色が異なります。Comp 2 ~ 9 のいずれかが失敗した場合、サービスは続行されますが、回復力が低下します。

これが私がテーブルを作成するために使用したものです

CREATE TABLE scratch
( 
    KeyID        int    PRIMARY KEY        NOT NULL, 
    CompDesc       varchar(30), 
    CompID        int    NOT NULL, 
    ReliesOn       int    NOT NULL, 
    RelianceType       varchar(30), 
)

INSERT scratch SELECT 0, 'Service', 0, 1, 'Full'
INSERT scratch SELECT 1, 'Component 1', 1, 2, 'Partial'
INSERT scratch SELECT 2, 'Component 1', 1, 3, 'Partial'
INSERT scratch SELECT 3, 'Component 1', 1, 4, 'Partial'
INSERT scratch SELECT 4, 'Component 4', 4, 5, 'Full'
INSERT scratch SELECT 5, 'Component 5', 5, 6, 'Full'
INSERT scratch SELECT 6, 'Component 6', 6, 7, 'Partial'
INSERT scratch SELECT 7, 'Component 6', 6, 8, 'Partial'
INSERT scratch SELECT 8, 'Component 2', 2, 9, 'Full'
INSERT scratch SELECT 9, 'Component 3', 3, 9, 'Full'
INSERT scratch SELECT 10, 'Component 7', 7, 9, 'Full'
INSERT scratch SELECT 11, 'Component 8', 8, 9, 'Full'

次に、非常に大雑把なクエリを実行して、ユーザーがサービスにアクセスできる 4 つの異なるオプションを表示できます。

SELECT t1.ReliesOn AS lev1, t2.ReliesOn as lev2, t3.ReliesOn as lev3, t4.ReliesOn as lev4, t5.ReliesOn as lev5, t6.ReliesOn as lev6
FROM Scratch AS t1
LEFT JOIN Scratch AS t2 ON t2.CompID = t1.ReliesOn
LEFT JOIN Scratch AS t3 ON t3.CompID = t2.ReliesOn
LEFT JOIN Scratch AS t4 ON t4.CompID = t3.ReliesOn
LEFT JOIN Scratch AS t5 ON t5.CompID = t4.ReliesOn
LEFT JOIN Scratch AS t6 ON t6.CompID = t5.ReliesOn
WHERE t1.ReliesOn = 1;

(申し訳ありませんが、おそらくそのクエリを一緒に並べるより良い方法があります)

この結果で -

lev1    lev2    lev3    lev4    lev5    lev6
1       2       9       NULL    NULL    NULL
1       3       9       NULL    NULL    NULL
1       4       5       6       7       9
1       4       5       6       8       9

私がやろうとしているのは、失敗したコンプを設定し、サービスがまだ利用可能かどうかを判断できるクエリを作成することです。

Failed      Result
1           No Service
2,3         Reduced Resiliency
3,8         Reduced Resiliency
2,3,7,8     No Service

これは非常に単純な例にすぎません。これに追加する必要があるものは他にもたくさんあります。ほとんどの場合、多数のサービスが同じコンポーネントに依存しています。

では、失敗したコンプからどのようにして依存関係を上/下/下に移動し、パスがまだ存在するかどうかを確認しますか?

うまくいけば、これは理にかなっています

ありがとう

4

2 に答える 2