perf: optimize vertex build query for recent records (#5301)

* Optimize query to fetch latest vertex builds.

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
dhlidongming 2024-12-19 00:50:13 +08:00 • committed by GitHub
commit 6e162b5a73
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,7 +1,7 @@
from uuid import UUID from uuid import UUID
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlmodel import col, delete, select from sqlmodel import col, delete, func, select
from sqlmodel.ext.asyncio.session import AsyncSession from sqlmodel.ext.asyncio.session import AsyncSession
from langflow.services.database.models.vertex_builds.model import VertexBuildBase, VertexBuildTable from langflow.services.database.models.vertex_builds.model import VertexBuildBase, VertexBuildTable
@ -10,8 +10,17 @@ from langflow.services.database.models.vertex_builds.model import VertexBuildBas
async def get_vertex_builds_by_flow_id( async def get_vertex_builds_by_flow_id(
db: AsyncSession, flow_id: UUID, limit: int | None = 1000 db: AsyncSession, flow_id: UUID, limit: int | None = 1000
) -> list[VertexBuildTable]: ) -> list[VertexBuildTable]:
subquery = (
select(VertexBuildTable.id, func.max(VertexBuildTable.timestamp).label("max_timestamp"))
.where(VertexBuildTable.flow_id == flow_id)
.group_by(VertexBuildTable.id)
.subquery()
)
stmt = ( stmt = (
select(VertexBuildTable) select(VertexBuildTable)
.join(
subquery, (VertexBuildTable.id == subquery.c.id) & (VertexBuildTable.timestamp == subquery.c.max_timestamp)
)
.where(VertexBuildTable.flow_id == flow_id) .where(VertexBuildTable.flow_id == flow_id)
.order_by(col(VertexBuildTable.timestamp)) .order_by(col(VertexBuildTable.timestamp))
.limit(limit) .limit(limit)