MarkLogic是如何计算电表小时数据的?

MarkLogic是如何计算电表小时数据的?,marklogic,marklogic-8,Marklogic,Marklogic 8,我知道有每小时可用的数据,但要求是这样的,我需要理解背后的逻辑,并在前端实现我的逻辑。当前前端正在接收原始数据 例如— 请求/费率(11:00时每小时)-28 如果以分钟为单位有相同的请求/速率,如何获得相同的值?每分钟也有不止一个值。 如何从原始数据创建每小时逻辑?监控历史(GUI)和“仪表”(API和功能)是相关但不同的 “仪表”功能是服务器内部的,它收集原始(通常是分钟)数据,每小时、每天和每月对其进行汇总,并使旧数据过期。 所有数据都以“普通”XML文件的形式存储在Meters数据库中,

我知道有每小时可用的数据,但要求是这样的,我需要理解背后的逻辑,并在前端实现我的逻辑。当前前端正在接收原始数据

例如— 请求/费率(11:00时每小时)-28

如果以分钟为单位有相同的请求/速率,如何获得相同的值?每分钟也有不止一个值。 如何从原始数据创建每小时逻辑?

监控历史(GUI)和“仪表”(API和功能)是相关但不同的

“仪表”功能是服务器内部的,它收集原始(通常是分钟)数据,每小时、每天和每月对其进行汇总,并使旧数据过期。 所有数据都以“普通”XML文件的形式存储在Meters数据库中,但也使用语义索引以uniq方式进行索引

Meters数据通过直接查询Meters数据库或通过一组公共REST入口点(其实现在安装树中的普通xquery source中)公开

“Monitorinig History”GUI是一个客户端应用程序,它使用公共rest端点,然后在客户端进行进一步处理以显示各种视图。具体的处理算法没有文档记录,但javascript代码也以“纯文本”形式进行检查。与调用REST端点相比,客户端javascript在何处进行额外的数据处理并不总是显而易见的——也不清楚您看到的内容与后端请求的确切映射

如果你的目标是复制“原始”数据,我建议直接进入仪表数据库,这就是“真相的来源”——尽可能多。 所要求的具体问题更为微妙。从电表数据库中的原始数据到每小时、每月等,并不总是能够完全谴责“汇总”行为。其基本上是“直接”的,但在内部,有些情况下,内部数据以更高的精度或更多的变量保存,然后发布到数据库中,该内部数据集用于聚合/汇总——这意味着数学计算结果并不总是完全相同。 此外,还有一些内部“规则”适用于wrt四舍五入到最接近的分钟/小时/5分钟等,以产生更一致的数据结果,但其副作用是可能会丢弃数据。例如,如果服务器负载过重,可能会出现数据样本的准确时间“四舍五入”到下一个周期的情况,并且可能会错误地表示该周期的平均值。服务器连续运行的第一个和最后一个部分小时可能没有可复制的小时汇总——即,如果您自己计算部分时段,您可能不会得到相同的答案,因为时间戳已调整为偶数时段。服务器内部的数据不会进行这种“舍入”,其目的是使客户端应用程序代码更易于编写,从而产生合理的结果。当试图跨集群中的服务器聚合时,还有更多的细节(就像GUI所做的那样)。当应用于集群时,“IO速率”等指标的含义并不总是显而易见的——它是集群范围的总和还是平均值?很像在多核系统上解释“LoadAvarage”

根据我对您问题的理解,我建议您直接使用计量数据库中的数据作为“源”数据。如果从原始数据开始,则删除所有“部分数据”(位于下一个更高汇总的开始和结束之外的数据)--也就是说,如果您在5:53启动服务器--将所有原始数据拖到6:00,然后包括6:00到7:00的所有原始数据--如果您使用等式中的所有原始属性(min、max、sum、avg、sumsq),您应该会发现与7:00写入的每小时数据几乎完全匹配。在舍入精度范围内,这些应匹配

使用“更高级别”的API,可能会产生您意想不到的答案。它们没有错,但有许多参数组合具有不同的可能含义——api不会因为您提供的参数不明确或不一致而出错。您可以将此策略与其他度量服务提供商(如AWS CloudWatch)进行比较——并非所有可能的参数组合都能产生可理解的结果。但原始数据——不受干扰——不会受到影响

另外,RESTAPI大量使用索引来提高效率。索引的精度与XML数据的精度不同,因此您可能会得到与精度相关的不准确度,具体取决于精确值——索引使用32位值。根据服务器版本的不同,XML数据可能使用32位或64位值,但索引仍然截断为32位

如果您想要准确,IMHO,请避免JSON输出——因为JSON固有的数字精度问题。这在监控历史中得到了补偿,但这样做相当繁琐

如果您希望获得最大的查询性能,请使用REST端点(XML或JSON)——它针对各种请求类型的查询性能进行了优化。虽然它不会给我们带来任何“魔力”——但直接从仪表数据中获得同样的性能和精度并不容易。再一次,看看端点的代码,它全部都是普通的xquery,用于检查,但它不是原始数据的“真实来源”——它的目的是高效*时间序列聚合查询*而不是最大精度。几乎所有的用法都是你想要的

“监控历史”(GUI)和“仪表”(API和功能)是相关的,但不同

“仪表”功能是服务器内部的,它收集原始(通常是分钟)数据,每小时、每天和每月对其进行汇总,并使旧数据过期。 所有数据都以“普通”XML文件的形式存储在Meters数据库中,但也以un格式编制索引