c# - 确定两台服务器的 "combined availability"比率

标签 c# sql-server report

我需要从两台服务器创建“可靠性”报告 - 服务器 A 和服务器 B

两者都跟踪其正常运行时间 - 或者更确切地说,在它们不可用的任何情况下。这些记录存储在 SQL Server 数据库表中

EventID INT  (PK)
Server CHAR(1)   -- 'A' or 'B'
EventStart DATETIME2(3)
EventEnd DATETIME2(3)

示例数据:

EventID  Server   EventStart                 EventEnd
--------------------------------------------------------------------
  34       A      2014-12-12 14:00:00.000    2014-12-12 15:00:00.000  
  35       A      2014-12-20 10:00:00.000    2014-12-21 03:00:00.000
  36       A      2014-12-27 16:30:00.000    2014-12-27 17:45:00.000
  37       B      2014-12-15 04:00:00.000    2014-12-15 09:35:00.000
  38       B      2014-12-20 20:00:00.000    2014-12-20 21:50:00.000
  39       B      2014-12-27 15:00:00.000    2014-12-27 17:00:00.000

这些数据行使用 Entity Framework 加载到 .NET 对象中,计算在 C# 中进行。

现在给出这些项目,我需要确定(对于给定的月份)服务器“A”和服务器“B”的可靠性 - 小菜一碟(只需总结每台服务器的停机总分钟数并计算可用性) .

棘手的部分是:我还需要本月两台服务器停机的分钟数 - 这样我就可以计算两台服务器中至少一台服务器停机的“综合可用性”可访问。

当然,我可以枚举服务器“A”的所有条目并检查是否有任何重叠的服务器“B”的条目 - 但这似乎有点低效。

有没有更明智的方法来做到这一点?我基本上在 C# 中有两个 Event 对象列表,它们具有与表中的列相同的字段。

最佳答案

这是一个算法:

  • 合并两个列表
  • EventStart 排序此列表
  • 迭代排序列表
  • 获取当前和下一个条目,比较当前的 [EventStart, EventEnd] 和下一个 EventStart
  • 重叠表示 2 个服务器同时不可用

时间复杂度:O(NLog(N)) = O(O(N) + O(NLog(N)) + O(N))。空间复杂度至少为 O(N)。其中 N 是两个列表中的项目数。

关于c# - 确定两台服务器的 "combined availability"比率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28045179/

相关文章:

sql - 如何将带有查找值的记录插入到 SQL 中?

sql - 嵌套 View 性能

node.js - Jasper Rest API,运行报告

xml - 解析 Junit xml 文件

c# - Nservicebus 多端点错误

c# - LINQ - FirstOrDefault() 然后 Select()

c# - 将属性表单对象复制到另一个对象的扩展方法,第一次尝试

sql - 过滤 SQL Server 2005 中的不良数据

java - 我如何遍历 Jasper 中的列表?

C# 从 get 返回一个只读变量;放;