背景
调 serpbase 拿数据后怎么 ETL 进数据仓库?3 种架构:实时同步、定时批处理、流式管道。
1. 方案 1:实时同步(简单)
python
import requests
from supabase import create_client
import os
supabase = create_client(os.environ["SUPABASE_URL"], os.environ["SUPABASE_KEY"])
def realtime_sync(query, data):
"""调 SERP → 写数据库(立即)"""
today = data["query"]
for i, item in enumerate(data.get("organic", []), 1):
supabase.table("serp_results").upsert({
"date": today,
"keyword": query,
"rank": i,
"title": item.get("title"),
"url": item.get("link"),
}).execute()
# 缺点:每次 SERP 调都写库,流量大
def pipeline_realtime():
r = requests.post(
"https://api.serpbase.dev/google/search",
headers={"X-API-Key": "sk_xxx"},
json={"q": "SERP API", "gl": "us", "num": 5},
timeout=10,
)
realtime_sync("SERP API", r.json())
2. 方案 2:定时批处理(成本低)
python
import schedule
def batch_pipeline():
"""每天 1 次批处理"""
queries = ["SERP API", "cheap SERP API", "SERP API 选型"]
today = datetime.now().strftime("%Y-%m-%d")
for q in queries:
r = requests.post(
"https://api.serpbase.dev/google/search",
headers={"X-API-Key": "sk_xxx"},
json={"q": q, "gl": "us", "num": 5},
timeout=10,
)
data = r.json()
for i, item in enumerate(data.get("organic", []), 1):
supabase.table("serp_results").upsert({
"date": today,
"keyword": q,
"rank": i,
}).execute()
schedule.every().day.at("03:00").do(batch_pipeline)
3. 方案 3:流式管道(实时 + 批处理)
python
# 用 Kafka 或 Kinesis 做流式管道
import json
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers="localhost:9092")
def stream_pipeline(query, data):
"""SERP → Kafka → 多个 Consumer 实时处理"""
for i, item in enumerate(data.get("organic", []), 1):
producer.send("serp-events", json.dumps({
"date": datetime.now().isoformat(),
"keyword": query,
"rank": i,
"title": item.get("title"),
}).encode())
# Consumer 实时处理
def consumer():
from kafka import KafkaConsumer
consumer = KafkaConsumer("serp-events", bootstrap_servers="localhost:9092")
for msg in consumer:
event = json.loads(msg.value)
# 实时写库 / 实时告警 / 实时 dashboard
process(event)
4. 3 种方案对比
| 维度 | 实时同步 | 定时批处理 | 流式管道 |
|---|---|---|---|
| 延迟 | 立即 | 24h+ | 实时(秒级) |
| 成本(1000 调用) | $0.30 | $0.30(每天 1 次) | $0.30 + Kafka 费 |
| 实现复杂度 | ★ | ★★ | ★★★★ |
| 适用规模 | 小 | 大 | 大 |
| 实时分析 | ✗ | ✗(批) | ✓ |
5. 选型
| 场景 | 推荐 |
|---|---|
| 小流量 | 实时同步 |
| 监控报告 | 定时批处理 |
| 实时分析 / 告警 | 流式管道 |
小结
3 种 ETL 选型:
- 小:实时同步(简单)
- 中:定时批处理(成本低)
- 大:流式管道(可扩展)
serpbase 数据流入这 3 种,选最适合的。30 天 100k 调用场景,定时批处理最省成本。