ユーザーがアクセスするサービスの依存関係をモデル化しようとしています。私は親/子の隣接リスト形式の表を作成しました。これは、「サービス」がコンポーネント2などに依存するコンポーネント1と依存関係のタイプに依存していることを示しています。完全またはSQL隣接リストのクエリ
部分この画像はレイアウトを示して - 彼らはその後、失敗した場合、全体的なサービスに障害が発生したため、依存関係の画像
コンプ1 & 9は、異なる色です。 Comp 2-9のいずれかが失敗した場合、サービスは継続されますが、弾力性は低下します。
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;
( - ここ
は、私は、ユーザーがサービスにアクセスできる4種類のオプションを表示することが非常に粗製のクエリを実行することができ、私はテーブル
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'
を作成するために使用したものです申し訳ありませんが、おそらくより良い方法は、クエリを一緒に文字列)
この結果 -
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
これはちょうど非常に単純な例ですが、私は私がこれを追加する必要があることをより多くのを持っており、ほとんどの場合、サービスの数は同じコンポーネントに依存します。
これで、障害が発生したコンパイルから、パスがまだ存在するかどうかを判断するために、依存関係をどのように上/下/下に移動しますか?
がうまくいけば、これは意味
おかげで明らかに
「コンポーネント9」は「コンポーネント2」などの「エントリポイント」ではないことを誰かが知ることができますか?また、なぜ 'コンポーネント9'がサンプルデータに含まれていないのですか? – danihp
私はあなたの質問を理解するか分からない。これは、失敗した場合にサービスの可用性をモデリングするために使用されます。私はエントリーポイントを知る必要があるとは思わない。 サンプルデータにComp 9が含まれていないため、依存関係はありません。私は追加できると思います INSERTスクラッチSELECT 12、 'Component 9'、9、NULL、NULL –