ravendb——计算非规范化属性平均值的MR指数
发布时间:2022-02-22 08:48:26 610
相关标签: # 数据# 信息
我有一个C#服务,定期响应客户请求执行一系列操作的请求,每个操作都存储在RavenDB操作文档中,带有这些属性,其中最后两个属性为性能而非规范化:
- Id(字符串-PK)
- 客户端ID(字符串FK)
- RequestId(String——请求的唯一Id。我们不存储请求实体)
- RequestDateTime(日期和时间-提出请求的日期和时间)
- RequestDuration(时间跨度-请求确定操作列表所用的时间)
我想创建一个MR索引,提供每个客户端的每小时请求统计信息,以便查看客户端#1、01/02/22 09:00-10:00等的统计信息。我很难计算AvgRequestDuration,因为由于数据被反规范化,该组包含重复的RequestDuration。显然,min&;max不受重复项的影响。
public class Result
{
public string ClientId { get; set; }
public DateTime PeriodStart { get; set; }
public TimeSpan MinRequestDuration { get; set; }
public TimeSpan MaxRequestDuration { get; set; }
public TimeSpan AvgRequestDuration { get; set; }
}
public ClientStatsByPeriodStartDateTime()
{
Map = action => from ac in actions
let period = TimeSpan.FromHours(1)
select new
{
ClientId = ac.ClientId,
PeriodStart = new DateTime(((ac.RequestDateTime.Ticks + period.Ticks - 1) / period.Ticks) * period.Ticks, DateTimeKind.Utc),
ac.RequestDuration
};
Reduce = results => from result in results
group result by new
{
result.ClientId,
result.PeriodStart
}
into agg
select new
{
ClientId = agg.Key.ClientId,
PeriodStart = agg.Key.PeriodStart,
AvgRequestDuration = agg.Avg(x => x.RequestDuration), // This is wrong
MinRequestDuration = agg.Min(x => x.RequestDuration),
MaxRequestDuration = agg.Max(x => x.RequestDuration)
};
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报