私は、複数のシステムに分散しているソフトウェア用のカスタム監視サービスを開発しています。パフォーマンス モニターのレポート ビューのようにデータを表示することにしました。
データを保存するために、最新の値のみを保持する非常に単純なデータベース テーブルを使用します。
|Server|Object|Instance|Query|Value|
したがって、各値は、サーバー、オブジェクト、インスタンス、およびクエリを通じて一意に識別できます。例は次のとおりです。
|Server| Object |Instance| Query |Value|
+------+------------+--------+-----------+-----+
| Srv1 | Disk | C:/ | TotalSize |500GB|
| Srv1 | Disk | C:/ | FreeSpace | 50GB|
| Srv1 | Disk | C:/ | UsedSpace |450GB|
| Srv1 | Disk | C:/ | VolumeLbl | OS |
| Srv1 | Disk | D:/ | TotalSize |900GB|
| Srv1 | Disk | D:/ | FreeSpace |700GB|
| Srv1 | Disk | D:/ | UsedSpace |200GB|
| Srv1 | Disk | D:/ | VolumeLbl | Data|
| Srv1 | Performance| --- | CpuUsage | 12% |
| Srv1 | Performance| --- | MemUsage | 34% |
| Srv1 | Performance| --- | Processes | 64 |
これを次のように変換します。
Srv1
Disk
C:/ D:/
TotalSize 500GB 900GB
FreeSpace 50GB 700GB
UsedSpace 450GB 200gb
VolumeLbl OS Data
Performance
CpuUsage 12%
MemUsage 34%
Processes 64
これをどのような構造で保管すればよいのか途方に暮れています。オブジェクト (ディスクとパフォーマンス) がサーバーのサブオブジェクトであることは簡単にわかりますが、クエリはインスタンスまたはオブジェクトのサブオブジェクトである必要がありますか? 通常のテーブルでは、各行はオブジェクトであり、列はその行のサブオブジェクトです。しかし、クエリはインスタンスのサブオブジェクトであるため、この場合は逆であるべきだと思います。また、値はクエリまたはインスタンスの下に格納する必要がありますか、それとも何らかの 2 次元配列にする必要がありますか? 基本的に、これを実装するための最もクリーンで効率的でベストプラクティスの方法は何ですか?
私たちは WPF を使用しており、構造にバインドできることはほぼ必須です。そのため、ObservableCollections または CollectionChanged を使用したカスタム構造のみを使用してこれを実装することは、2 番目の課題です。