- 排行榜改为按天预计算快照(admin_leaderboard_daily_stats),请求只读取合并,重统计移至后台调度;过去日不可变、当天 TTL 刷新,避免在线聚合长时间占用数据库 - 为 runs/tool_call_metrics/llm_call_metrics/threads_meta 增加面向时间段+用户聚合的复合索引(model __table_args__ + migration 20260608_01) - 连接池可调:DatabaseConfig 新增 max_overflow / pool_timeout,接入 postgres/mysql 引擎;config.yaml 上调 pool_size=20/max_overflow=20 - 新增手动执行的索引脚本 scripts/sql/leaderboard_indexes_mysql.sql(幂等,适用于已存在数据、create_all 不补索引且 alembic 关闭的部署) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
29 lines
1.2 KiB
Python
29 lines
1.2 KiB
Python
"""ORM model for thread metadata."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import UTC, datetime
|
|
|
|
from sqlalchemy import Index, String
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from deerflow.persistence.base import Base
|
|
from deerflow.persistence.types import BeijingDateTime, PortableJSON
|
|
|
|
|
|
class ThreadMetaRow(Base):
|
|
__tablename__ = "threads_meta"
|
|
__table_args__ = (
|
|
Index("ix_threads_meta_created_user", "created_at", "user_id"),
|
|
Index("ix_threads_meta_user_created", "user_id", "created_at"),
|
|
)
|
|
|
|
thread_id: Mapped[str] = mapped_column(String(64), primary_key=True)
|
|
assistant_id: Mapped[str | None] = mapped_column(String(128), index=True)
|
|
user_id: Mapped[str | None] = mapped_column(String(64), index=True)
|
|
display_name: Mapped[str | None] = mapped_column(String(256))
|
|
status: Mapped[str] = mapped_column(String(20), default="idle")
|
|
metadata_json: Mapped[dict] = mapped_column(PortableJSON(), default=dict)
|
|
created_at: Mapped[datetime] = mapped_column(BeijingDateTime(), default=lambda: datetime.now(UTC))
|
|
updated_at: Mapped[datetime] = mapped_column(BeijingDateTime(), default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC))
|