SerpBase 快照存 Tablestore,统计放 AnalyticDB

简介: 一张表难兼存储与统计:Tablestore 擅长按主键查快照,但聚合乏力;AnalyticDB 专精列式扫描与多维统计。按访问模式拆分——Tablestore 存原始响应(keyword+day+request_id),ADB 存摊平字段做聚合,查询提速、架构更稳。(239字)

一张表干不了两件事

快照刚上线时,我想用 Tablestore 一张表把所有事都干了:存原始响应、按关键词查历史、顺便跑模块统计。

前两件很顺,第三件很别扭。Tablestore 擅长按主键点查和范围扫描,GROUP BY 不是它的主场。写一个「过去 30 天 AI 概览出现率」的统计,要么全表扫,要么在应用层把数据拉回来自己算。

后来把统计拆到 AnalyticDB,两张表各干各的活,事情就顺了。

分工:存储与统计

  • Tablestore:按 keyword + day + request_id 存原始响应,负责「取某天、某词的快照」
  • AnalyticDB:存摊平后的字段,负责「按天、按市场、按模块做聚合」

这个拆分的关键不是技术选型,是访问模式。快照是写多读少、按时间取;统计是批量扫、按维度聚合。两种模式塞进一个引擎,总有一边难受。

统计表长什么样

只放聚合需要的字段,不放大 JSON:

CREATE TABLE serp_snapshots (
    keyword       VARCHAR(128),
    day           DATE,
    request_id    VARCHAR(64),
    status        INT,
    credits       DECIMAL(10, 2),
    has_ai        BOOLEAN,
    has_paa       BOOLEAN,
    top_domain    VARCHAR(128),
    best_rank     INT
) DISTRIBUTED BY HASH(keyword);

分布键选 keyword,因为大多数查询会按关键词过滤;如果查询以「按天看全站」为主,分布键可以换成 day。ADB 的分布键决定了数据落在哪个分片,选错会让查询变成跨分片扫描。

credits 用 DECIMAL 存,别用浮点;has_ai/has_paa 在写入前就从模块字段算好,统计时不用再解析 JSON。

常用查询

模块出现率(按天):

SELECT day,
       AVG(CASE WHEN has_ai THEN 1 ELSE 0 END) AS ai_rate,
       AVG(CASE WHEN has_paa THEN 1 ELSE 0 END) AS paa_rate
FROM serp_snapshots
WHERE day >= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)
GROUP BY day
ORDER BY day;

域名集中度(按周):

SELECT top_domain, COUNT(*) AS n
FROM serp_snapshots
WHERE day >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
GROUP BY top_domain
ORDER BY n DESC
LIMIT 10;

排名变化(按关键词):

SELECT keyword, day, best_rank
FROM serp_snapshots
WHERE keyword IN ('serp api', 'google search api')
  AND day >= DATE_SUB(CURRENT_DATE, INTERVAL 14 DAY)
ORDER BY keyword, day;

这几条查询覆盖了大多数报表需求,而且都是列式扫描,比在宽列库里硬算快得多。

数据怎么进去

快照写入 Tablestore 之后,用一个批处理任务把当天数据摊平、写进 ADB:

  1. 按天扫 Tablestore(主键范围扫描)
  2. 解析模块字段,算出 has_ai/has_paa/top_domain/best_rank
  3. 批量写入 ADB,按 request_id 做幂等

批处理可以用 DataWorks、函数计算或一台定时 ECS。关键是按天批次,不要一条一条写——ADB 喜欢批量。

如果重来

我会在第一天就把存储和统计分开。第一版把统计压在 Tablestore 上,花了两天写应用层聚合,最后发现 SQL 三行就能解决。

另一个当时没想清楚的问题:ADB 要不要存全量历史。现在的做法是只留最近 180 天,更早的聚合结果留在报表库里,原始快照归档到 OSS。统计要的是趋势,不是每一条原始记录。

SerpBase 的响应字段见 SerpBase 文档;AnalyticDB 的分布键与查询语法见 阿里云官方文档。两张表各干各的活,比一张表硬撑所有场景轻松得多。

相关文章
|
云安全 安全 网络安全
|
7天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
2005 1
|
14天前
|
JSON 程序员 数据格式
最新版Notepad++下载、安装、配置保姆级教程(附官网安装包)
Notepad++ 是一款免费开源、轻量快速的 Windows 文本编辑器,支持多标签、语法高亮、代码折叠与宏录制,体积小、启动快、资源占用低,兼容 x64/x32/ARM 架构,是程序员和文字工作者的高效利器。
3139 0
|
13天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
2256 44
|
10天前
|
Web App开发 人工智能 前端开发
2026 年 AI 浏览器怎么选?Ego Lite、Tabbit、Chrome DevTools MCP 深度对比,开发者到底该用哪个?
2026年AI浏览器选型指南:Ego Lite专注多Agent协同(Mac优先),Tabbit国产首选,原生支持Windows与Codex控制;Chrome DevTools MCP非浏览器而是开发者利器,深度集成Console/Network/Performance调试能力,让AI真正“看懂并验证”前端代码。
1416 3
|
7天前
|
安全 应用服务中间件 Go
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
PHP2Shell 双 RCE 已遭在野利用:WordPress、Drupal 全在射程内,nginx 其实另有洞。拆成因与修复顺序
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
|
7天前
|
开发者 索引
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
Open Plugin Market 是一个开放插件索引平台,收录800+优质DSH插件,支持分类浏览、智能推荐与随机发现。无需安装市场,粘贴索引地址即可一键接入,网页版直访 dshopen.org,助力小开发者被看见。(239字)
1692 1
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
|
6天前
|
人工智能 Linux API
Magpie, 轻量本地AI网关!免费Token用不完!
Magpie 是开源AI编程模型调度网关,上线一月获1.8万Star。它通过本地高性能网关统一托管多平台API密钥、账号与免费额度,实现跨Agent的模型秒级切换、静默额度轮换与资源复用,显著降低碎片化管理成本。(239字)
Magpie, 轻量本地AI网关!免费Token用不完!
|
6天前
|
安全 程序员 应用服务中间件
PHP 被曝两大致命漏洞,请所有程序员抓紧做这件事!
PHP 官方发布了紧急安全更新,一口气修复了两个严重漏洞。如果网站和服务器用了 PHP 应该怎么处理?漏洞的原理是什么?本文给你讲清楚
696 0

热门文章

最新文章