我正在为我们的软件开发一个自定义监控服务,该服务分布在多个系统上。我们决定在性能监视器中显示类似报告视图的数据。
为了存储数据,我们使用了一个非常简单的数据库表,它只保留最新的值:
|Server|Object|Instance|Query|Value|
所以每个值都可以通过 Server、Object、Instance 和 Query 唯一标识。一个例子可能是
|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
我不知道应该使用哪种结构来存储它。很容易看出Objects(Disk and Performance)是Server的子对象,但是Query应该是Instance的子对象,还是Object?在常规表中,每一行都是一个对象,列是该行的子对象。但我觉得在这种情况下应该是相反的,因为查询是实例的子对象。值应该只存储在查询或实例下,还是应该是某种二维数组?所以基本上,实现这一点的最干净、最有效和最佳实践的方法是什么?
我们正在使用 WPF,并且能够绑定到结构几乎是一项要求。因此,仅使用 ObservableCollections 或带有 CollectionChanged 的自定义结构来实现这一点是第二个挑战。