跳转到内容
搜索文档

Workers Analytics Engine 常见问题

最后更新 查看 MarkdownAgent 设置

以下是我们最常见问题的答案。

采样

我能否使用许多 unique index 值来获得更好的 unique 计数?

不能,添加大量 index 值并非没有缺点。权衡是跨许多 index 读取很慢。

实际上,由于 ABR 的工作方式,在一个查询中从许多 index 读取将导致低分辨率数据——可能低得无法使用。

另一方面,如果你选择与你的读取方式对齐的良好 index,查询将运行更快,你将获得更高分辨率的结果。

如果我需要在多个值上建立 index 怎么办?

可以在 index 字段中连接多个值。因此,如果你想在 user ID 和 hostname 上建立 index,可以在 index 字段中写入,例如 "$userID:$hostname"

请注意,根据你的查询模式,使用不同 index 写入相同数据集可能更有意义。常见误解是应避免「double-writing」数据。

得益于采样,多次写入数据的成本可能相对较低。但是,低效读取数据可能导致显著费用或由于采样导致低质量结果。

如何知道我的数据是否被采样?

你可以使用 _sample_interval 字段——再次注意,这并不能告诉你结果是否准确。

当数据在读取时被采样,你可以识别,因为 sample interval 将是 10 的幂的倍数,例如 20700。读取时何时开始采样没有硬性规则,但实践中读取更长时间段(或更多 index 值)将导致更高的 sample interval。

为什么数据缺失?

采样 largely 基于 index 的选择,以及其他因素,如查询的时间范围和读取的 index 数量。如果你从较大的 index 读取更长时间段,并 filter 到该 index 内相对较小的 subgroup,可能由于采样而不存在。

如果你需要读取该 subgroup 的准确结果,我们建议将该字段添加到 index(请参阅 What if I need to index on multiple values)。

我可以信任采样数据吗?我的结果准确吗?

采样数据高度可靠,特别是在使用精心选择的 index 时。

诚然,目前很难证明 ABR 查询返回的结果在特定 error bound 内。作为经验法则,使用 count() 检查读取的行数是个好主意——将其视为图像中的像素计数。读取的行数越多,结果越准确。(另一方面,_sample_interval 字段并不能告诉你结果是否准确)。如果你仅从一两行外推,结果不太可能具有代表性;如果你从数千行外推,结果很可能相当准确。

在不久的将来,我们计划在查询结果中暴露 margin of error,以便你精确了解结果的准确程度。

如何处理 burst?

Equitable sampling 既用于 normalize 组间差异,也用于处理给定 index 的大流量 spike。Equalization 每隔几秒发生;如果你非常接近地写入许多事件,则预期它们会在写入时被采样。给定 index 的 sample interval 会根据当前写入速率 moment to moment 变化。

多少流量会触发采样?

没有固定规则决定何时触发采样。

我们观察到,对于像全球 CDN 这样在网络中分布负载的工作负载,每个 index 值每秒约需要 100 个数据点,采样才会变得 noticeable。

根据你的工作负载以及如何使用 Workers Analytics Engine,采样可能在此阈值更高或更低时开始。例如,如果你从单个 worker 执行写入许多数据点,数据更可能被采样。

这篇文档对您有帮助吗?