perf: website_sync 批量查询 + custom_pages origin TTL 缓存
This commit is contained in:
@@ -96,13 +96,27 @@ def sync_binding(db: Session, binding: WebsiteGroupBinding, write: bool = True)
|
||||
if not website:
|
||||
raise WebsiteError("网站不存在")
|
||||
sources = binding_sources(binding)
|
||||
# ── 批量预查:收集所有上游 ID,一次查询上游名称 ──
|
||||
upstream_ids = {int(s.get("upstream_id") or 0) for s in sources if s.get("upstream_id")}
|
||||
upstreams = {}
|
||||
if upstream_ids:
|
||||
rows = db.query(Upstream).filter(Upstream.id.in_(upstream_ids)).all()
|
||||
upstreams = {u.id: u for u in rows}
|
||||
# ── 同一轮 sync 内的快照缓存(调用级,函数返回即释放)──
|
||||
_snap_cache: dict[int, dict[str, Any]] = {}
|
||||
|
||||
def _get_snap(upstream_id: int) -> dict[str, Any]:
|
||||
if upstream_id not in _snap_cache:
|
||||
_snap_cache[upstream_id] = latest_rate_map(db, upstream_id)
|
||||
return _snap_cache[upstream_id]
|
||||
|
||||
source_rates: list[dict[str, Any]] = []
|
||||
for source in sources:
|
||||
upstream_id = int(source.get("upstream_id") or 0)
|
||||
group_id = str(source.get("group_id") or "")
|
||||
groups = latest_rate_map(db, upstream_id)
|
||||
groups = _get_snap(upstream_id)
|
||||
group = groups.get(group_id) if group_id else None
|
||||
upstream = db.query(Upstream).filter(Upstream.id == upstream_id).first()
|
||||
upstream = upstreams.get(upstream_id)
|
||||
source_rates.append({
|
||||
"upstream_id": upstream_id,
|
||||
"upstream_name": source.get("upstream_name") or (upstream.name if upstream else ""),
|
||||
|
||||
Reference in New Issue
Block a user