perf(results): build typed columns directly from the driver stream instead of collecting List<List<Object?>> first
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 42/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- dart, mysql, postgresql, sqlite
- Área
- database, performance
Línea de trabajo
Read postgres_sql_workspace.dart, mysql_sql_workspace.dart, and sqlite_sql_workspace.dart to trace how each driver currently collects rows and builds CompactResultDataset; then inspect CompactResultDataset.fromRawRows and the related work in #1548. Define a shared builder that preserves current mixed-type and NULL behavior, and use existing dataset tests to check it across all three drivers. Done means those tests pass and the PR reports peak RSS and timings for 5k and 50k rows.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
Each SQL driver workspace builds an intermediate List<List<Object?>> of the whole result and only then packs it into typed columns (CompactResultDataset.fromRawRows):
- PostgreSQL (
postgres_sql_workspace.dart):rawRows.add(row.toList())for every row. - MySQL (
mysql_sql_workspace.dart):taken.items(allResultSetRows kept) and then[for (i...) row.colAt(i)]per row. - SQLite: same pattern (
sqlite_sql_workspace.dart).
So every cell is copied into a per-row list once, kept alive until the dataset is built, and then read again column by column.
Measurements
Local PostgreSQL 16 / MySQL 8.4 containers, 100k rows x 20 columns, dart run, median of 3:
| Driver | Rows | Network + decode | Extra row copy | Longest event-loop stall during it |
|---|---|---|---|---|
| PostgreSQL | 5,000 | 21-22 ms | 1-3 ms (row.toList) |
0 ms |
| PostgreSQL | 50,000 | 257-271 ms | 10-19 ms | 0-2 ms |
| MySQL | 5,000 | 31-38 ms | 2-5 ms (colAt) |
4-7 ms |
| MySQL | 50,000 | 296-320 ms | 33-42 ms | 7-15 ms |
(The decode itself yields between socket chunks: the PostgreSQL driver blocks the event loop for 0-2 ms even at 50k rows, so moving the driver into a worker isolate would not remove a visible hitch; it only adds connect cost and a result hand-off. Not recommended.)
Solution
Let the driver loop append into column builders (int / double / string / generic with a null bitmap) as rows arrive, deciding the kind from the first rows and falling back to generic when a value does not fit, instead of collecting List<List<Object?>>. A small ResultColumnsBuilder would be shared by the three drivers and by #1548's sampled detection.
Expected: removes the 1-3 ms (5k) / 10-40 ms (50k) copy and the peak memory of the intermediate list, and makes the "decode / pack" step incremental.
Acceptance
- A shared builder used by PostgreSQL, MySQL and SQLite workspaces; existing dataset tests unchanged.
- Mixed-type and NULL-heavy columns still end up as
generic/stringexactly as today (tests). - Peak RSS and time for 5k and 50k rows reported in the PR.
Related: #1548, #1549.
- Lenguaje dominante
- Dart
- Estrellas
- 23
- Forks
- 1
- Merge medio
- 31 min
- PR fusionados (30 d)
- 570
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de QueryaHub/Querya-Desktop
-
enhancement ui
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
QueryaHub/Querya-Desktop#1689 ·
Los mantenedores suelen responder en 1 día
-
ui(dialogs): make destructive query and DML preview dialogs adaptive and prevent table name overflowAbiertobug frontend
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
QueryaHub/Querya-Desktop#1642 ·
Los mantenedores suelen responder en 1 día
-
bug error-handling settings
Dificultad 1/5 1-3 horas Aptitud para principiantes 78/100
QueryaHub/Querya-Desktop#1637 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
QueryaHub/Querya-Desktop#1636 ·
Los mantenedores suelen responder en 1 día
-
enhancement marketplace
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
QueryaHub/Querya-Desktop#1635 ·
Los mantenedores suelen responder en 1 día
Todos los issues de QueryaHub/Querya-Desktop
Issues similares
-
agent:in-progress agent:ready feature P2 · 中 区域: 悬浮窗
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
ASDW51/DanmuFloat#178 ·
Los mantenedores suelen responder en 1 día
-
Missing workoutsAbiertoenhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
InlitX/GymMane#237 · 1 comentario ·
Los mantenedores suelen responder en 5 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
AppFlowy-IO/AppFlowy#9077 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Abhinivesh2729/Thinai#41 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
0niel/university-app#617 ·
Los mantenedores suelen responder en 1 día