最初のasp.netWebアプリを完成させようとしていますが、難しい問題が発生しました。Webアプリは、全国のさまざまな場所でネットワークデバイスをテストし、応答時間を記録するように設計されています。Windowsサービスは、これらのデバイスを定期的に、通常は1〜10分ごとにチェックします。各チェックの結果は、この設計でSQLServerテーブルに記録されます。(デバイスがダウンしている場合、ResponseTimeはNULLです。)
CREATE TABLE [dbo].[DeviceStatuses] (
[DeviceStatusID] INT IDENTITY (1, 1) NOT NULL,
[DeviceID] INT NOT NULL,
[StatusTime] DATETIME NULL,
[ResponseTime] INT NULL,
CONSTRAINT [PK_DeviceStatuses] PRIMARY KEY CLUSTERED ([DeviceStatusID] ASC),
CONSTRAINT [FK_DeviceStatuses_Devices] FOREIGN KEY ([DeviceID]) REFERENCES [dbo].[Devices] ([DeviceID])
);
このサービスは数か月間実行されており、デバイスの数は最小限で、テーブルには約500,000行あります。クライアントは、各デバイスの3か月のロールダウンタイムの概要にアクセスしたいと考えています。次のようなもの:
ダウンタイム: 2012年12月11日15:20-3:
42
PM2012/12/20 1:00 AM-9:00 AM
私の理解の限りでは、もちろん特定のDeviceIDについて、NULLResponseTimesの各ブロックの開始と終了のStatusTimeを取得する必要があります。GoogleとStackOverflowでいくつか検索しましたが、私がやろうとしていることに似たものは見つかりませんでした。(適切な検索用語を使用していない可能性があります。)経験豊富なプログラマーである兄は、SQL ServerでCURSORを使用できる可能性があると提案しましたが、CURSORのパフォーマンスはひどいので、スケジュールされたタスク。何かお勧めはありますか?