本页统计的是什么
DEV-downloader-v1.md §六 · SeaweedFS 网页库,一页一对象
⚠️ 本页的「索引量」= 网页库对象量。正文抽取与倒排索引归下游,不在六份文档范围内,本服务只负责「URL 进,网页对象出」。
⚠️ 已发现 URL 总数、去重命中率、队列深度、重抓周期不在本页。它们在 scheduler:url_task 与 scheduler:bloom_filter_snapshot,属调度器;CONTRACT.md §一 没有下载器读取这些表的边,没有边就是不能传。
网页库规模
SeaweedFS 网页库 + downloader:domain_runtime:{domain} · 唯一写入方 下载器
- 对象总数
- 8,412,663
- 存储占用
- 641 GB
- 24h 新增对象
- 340,492
- 24h 新增存储
- 27 GB
- 覆盖域名数
- 128,540
- 平均对象体积
- 80 KB 压缩后
⚠️ 覆盖域名数取自 downloader:domain_runtime 的 key 数,含义是本服务发起过请求的域名。它不等于已判定为 csr 的域名数(采样器 sampler:domain_rule),也不等于已入队域名数(调度器)。三者不可互相代用。
⚠️ 一页一对象,不用 WARC 做存储格式。删除就是删一个 key —— 这是页面级下线通道的基础:目标内容大量是正规站点下的 UGC,问题出在单页而非整域。
哪些抓取会产出对象
downloader:fetch_result:{url_hash} · fetch_status 四值 · 近 24 小时
| fetch_status | 页数 | object_id | 对象增量 | 说明 |
|---|---|---|---|---|
| done | 318,904 | 有 | +318,904 | 渲染成功,对象落库 |
| empty | 21,588 | 有 | +21,588 | 渲染成功但正文为空,对象仍落库,下游扫描时应跳过 |
| not_modified | 24,190 | null | 0 | 304 未渲染,对象未更新,所有统计字段与 health_signal 留空 |
| failed | 7,458 | null | 0 | 渲染失败,无对象 |
⚠️ empty 独立于 failed:对象已落库但正文为空。把两者合并,下游会消费到空壳;把 empty 的对象当作没入库,索引量会漏计 21,588。
⚠️ 入口 C(POST /v1/probe)内部强制 should_store = false,探针页面不入库,24h 的 12,405 次探针不进本页任何数字。
不可补算字段的完整率
DEV-downloader-v1.md §六「必须捕获(事后无法补算)」· 近 24 小时入库对象
| 字段 | 完整率 | 缺失对象 | 不存的后果 | 状态 |
|---|---|---|---|---|
| response_headers | 100.00% | 0 | 条件请求做不了 | 完整 |
| redirect_chain | 100.00% | 0 | 规范化与图谱合并缺证据 | 完整 |
| robots_snapshot | 99.94% | 204 | 合规证据。半年后对方改 robots 来追责,要能证明抓时是允许的 | 需重抓 |
| raw_html | 100.00% | 0 | 采样器复核算不出 ratio | 完整 |
| raw_text_length | 100.00% | 0 | 失效检测要每次重解析 raw_html | 完整 |
| console_errors | 100.00% | 0 | 判断不了渲染是否完整;has_console_error 由它算 | 完整 |
| network_log | 100.00% | 0 | health_signal 的 XHR 四项由它算 | 完整 |
⚠️ 这七项事后无法补算,只能重抓。robots_snapshot 缺失的 204 个对象必须重新抓取补齐,不能用 sampler:robots_rule 顶替 —— 后者会在复核时刷新,是「当前规则」,不是抓取时刻的同期证据,两者不可互相替代,名字也不可互借。
语种三字段
网页对象 lang / region / jurisdiction · 语种识别在采样器完成,下载器只透传 · 近 24 小时入库对象
lang
| 取值 | 对象数 | 占比 | 占比 |
|---|---|---|---|
| zh-Hans | 129,387 | 38.0% | |
| zh-Hant | 88,528 | 26.0% | |
| ja | 61,289 | 18.0% | |
| en | 40,859 | 12.0% | |
| 其他 | 13,620 | 4.0% | |
| null | 6,809 | 2.0% |
region 与 jurisdiction
| 取值 | region 对象数 | jurisdiction 对象数 |
|---|---|---|
| CN | 122,577 | 122,577 |
| TW | 78,313 | 78,313 |
| HK | 27,239 | 27,239 |
| MO | 6,810 | 6,810 |
| JP | 61,289 | 61,289 |
| OTHER | 44,264 | 44,264 |
⚠️ 三字段独立存储,禁止合并。上表是两条各自独立的分布共用一根取值轴,不是交叉表。两列当前逐值相等,只是因为 DEV-sampler.md §五 的 region → jurisdiction 映射目前是一一对应 —— 不得据此把两个字段合成一个。
⚠️ TW / HK / MO 各自独立取值,不并入 CN。技术层只负责如实标注,合并与否是下游策略层的决定;字段合并了就再也拆不开。
⚠️ zh-Hans 与 zh-Hant 不靠 TLD 判断,四语种基线以采样器 §十 的阈值标定为准,本页只呈现结果、不做判定。
语种可信度与渲染路径
网页对象 lang_source / render_path · 近 24 小时入库对象
lang_source
| 取值 | 对象数 | 占比 | 来源 |
|---|---|---|---|
| domain_rule | 318,904 | 93.7% | 采样器判定,经 lease 下发 |
| caller | 4,772 | 1.4% | 入口 B 调用方自带 |
| unknown | 16,816 | 4.9% | 给不出,留空不猜 |
render_path
| 取值 | 对象数 | 占比 | 说明 |
|---|---|---|---|
| obscura | 340,492 | 100.0% | v1 唯一渲染引擎 |
⚠️ lang_source 是可信度标记,不是语种本身。给不出语种时留空,不猜,下游按本字段判断可信度。
⚠️ render_path 字段 v1 已预留但只有一个取值。出现 obscura 以外的取值,说明 v2 的 Chrome 兜底已启用(DEV-downloader-v2.md §三),届时本表才会多行。
正文长度分布
网页对象 text_length · 分母为入库对象 340,492(done + empty)
| text_length | 对象数 | 占比 | 占比 | 说明 |
|---|---|---|---|---|
| 0 | 21,588 | 6.3% | 即 fetch_status = empty 的那批 | |
| 1 ~ 500 | 27,239 | 8.0% | 短页、索引页 | |
| 500 ~ 2,000 | 95,338 | 28.0% | ||
| 2,000 ~ 8,000 | 132,792 | 39.0% | 主体 | |
| 8,000 ~ 30,000 | 51,074 | 15.0% | ||
| ≥ 30,000 | 12,461 | 3.7% | 长文与聚合页 |
⚠️ raw_text_length 中位数 196,text_length 中位数 3,240。raw_ 前缀 = 渲染前,无前缀 = 渲染后,两者读反会让所有下游判断反向。
⚠️ 本页不计算 text_ratio。ratio 的分子分母定义、方向(越低越 CSR,反直觉)、分母为 0 时取 null,以及据此得出的 verdict,全部属于采样器(DEV-sampler.md §四)。下载器只提供两个长度值。
链接图谱与结构化载荷
网页对象 link_list / structured_payload · 近 24 小时入库对象
链接
| 口径 | 条数 | 每页均值 |
|---|---|---|
| link_count | 14,300,664 | 42.0 |
| js_injected_link_count | 12,155,564 | 35.7 |
| 非 JS 注入 = 前者 − 后者 | 2,145,100 | 6.3 |
structured_payload 命中
| 键 | 对象数 | 命中率 |
|---|---|---|
| jsonld | 156,626 | 46.0% |
| __NEXT_DATA__ | 88,528 | 26.0% |
| microdata | 47,669 | 14.0% |
| window.__NUXT__ | 34,049 | 10.0% |
| 四项皆无 | 71,503 | 21.0% |
⚠️ js_injected_link_count 是 link_count 的子集,不是补集。非 JS 注入数 = 前者 − 后者。写反了 link_ratio 会静默反向 —— 不报错、不崩溃、结论相反。
⚠️ injected_by_js 是本系统独有的信号,不在抓取时打标,以后永远分不出来。本行完整率必须恒为 100%。
⚠️ 四项命中可重叠,合计不等于对象数。对 CSR 站这些不是元数据,是内容的结构化版本 —— 下游抽取可能出错,这些字段是干净的基准。
容量投影
DEV-downloader-v1.md §十一 · 按压缩后约 80KB/对象估算
| 核数 | 渲染吞吐 | 24h URL | 24h 新增存储 | 状态 |
|---|---|---|---|---|
| 4 核 | 3~5 页/s | 25~45 万 | 20~36 GB | 当前 |
| 8 核 | 6~9 页/s | 52~78 万 | 42~62 GB | |
| 16 核 | 10~14 页/s | 86~120 万 | 69~96 GB |
⚠️ 下载器无状态,加机器即可线性涨到磁盘为止,每台用不同 worker_id 去 lease,扩容不需要调度器改配置。max_concurrent_count 是唯一的成本刹车,必须能在线调。
⚠️ 门槛一若未通过(改接 Stylo 或改用 Chrome),同样核数的吞吐降三到四成,上表整列需要重算。