国家维度图表给不了的五种拆分
地区带有 ISO 行政区划代码和 GeoNames 标识符,因此「Bavaria」和「Bayern」是同一行,而不是两行。城市带有坐标和精度半径,正是这一点让地图变得诚实:一个半径二十公里的点代表的是一段地址范围,而不是一个人,界面上也会这样写明。
网络这一项列出自治系统号、运营商名称、该地址段的代理类型,以及——最关键的——把真人点击与总点击分开统计。就这一列,回答了每一位媒体采买方迟早都会问的问题:究竟是哪家运营商,一直在给我送永远不转化的流量。
流量质量按访客类型、代理类型和质量评分区间拆分访问量。而按当地小时统计的活跃度,是用点击发生那一刻访客自己的时区算出来的,因为存储引擎只能换算到某一个固定时区,而这里每一行的时区都不一样。
- 带行政区划代码和 GeoNames 标识符的地区
- 带坐标和精度半径的城市
- 带自治系统、运营商和代理类型的网络
- 访客类型、代理类型和质量评分区间
- 按访客当地小时、而不是按你的小时统计的活跃度
地名用读者的语言,而不是写入者的语言
点击事件里存的是标识符,从不存本地化后的名称。名称是在读报表的那一刻,从读者所用语言的词典里解析出来的——正因如此,同一次点击在一位同事那里显示为「Berlin」,在另一位那里显示为「柏林」,而底下存着的只有一行。
控制台支持十种语言,其中八种有地名词典;剩下两种回退到英文,而不是留下一个空单元格。这些词典有好几兆字节,只存在于服务端:没有任何类似的东西会被下发到浏览器,而语言取自读者自己的设置,而不是某个请求参数——若取自参数,一个人就能用别人的语言污染整个工作区的共享缓存。
这些数据是什么,又不是什么
地理答案来自有授权的商业数据库,打包成专为 edge 设计的格式,并且有一条写在文档里的兜底路径:数据包不可用时,解析器退回到 CDN 本来就提供的网络层数据,并把结果标记为近似值。每一行都记录着是哪个数据源给出的答案,因此一张图表绝不会悄悄把精确数据和近似数据混在一起。
访客的地址从不被存储。它只在一个函数内部存在片刻,用来生成当日指纹——一份每晚轮换的加盐哈希——以及查出所属地址段;它到不了事件那一层。邮政编码会被解析出来,但刻意不记录:在密集住宅区里,一个邮政编码已经很接近一个门牌号了。
地名数据该署名的地方就署名:城市和地区名称来自 GeoNames 数据库,依据 CC BY 4.0 使用,署名声明公开发布在站点上,而不是埋在某份合同里。
精细程度是一项设置,而不是一口价
每个工作区自己决定要留下其中多少。完整精度会存下坐标和时区;「城市但不含坐标」保留市场信息,舍弃地图上的那个点;「仅国家」只保留大洲和国家,别的一概不留——在这一档,事件甚至根本不会去查地理数据库。
这是一项关于写入、而不是关于读取的设置。隐私模式关掉的东西根本不会被写下来,因此没有任何报表、导出或日后的查询能把它找回来。保留期也是同样的做法:每条事件自带保留期,到期时由存储引擎删除该行。
常见问题
城市级别的数据有多准?
准到足以比较市场,不足以找到某个人——而且界面会显示精度半径,好让你分得清这两者。一条典型的城市记录带着几十公里的半径。坐标描述的是一段地址范围,而不是一位访客。
你们会存储访客的 IP 地址吗?
不会。地址只在内存中被用来计算一份当日加盐指纹、并查出所属地址段,随后即被丢弃。指纹无法反推,salt 每晚轮换,因此同一位访客无法被跨天追踪。
如果地理数据库不可用会怎样?
跳转照常工作,数据分析照常记录。解析器退回到 CDN 提供的网络层数据,并在该行标注这个数据源,于是图表里仍然有数,你也能看出哪些行是近似的。
出于隐私考虑,可以把它关掉吗?
可以,逐工作区设置,而且它在写入时生效,而不是在读取时生效。你可以选择「城市但不含坐标」、「仅国家」,或者那个更严格的预设——它还会同时舍弃网络、完整的来源地址和流量类型识别。已有链接会在几秒之内应用这项改动,而不是等到下一次缓存过期。