ThinkR-open / ThinkR-open/datadiff
[perf] Chemin lazy : le collect() de la table slim booléenne charge N×(T+E) logicals en RAM — contredit la promesse « without loading data into R memory »
Nobody has claimed this yet.
- Dominant language
- R
- Stars
- 6
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
Contexte
Le commentaire du bloc lazy (R/compare_datasets_from_yaml.R, construction de cmp_for_agent) promet « makes agent creation and interrogation fast without loading data into R memory (~62 MB for 4 M rows) ». Mais la ligne suivante fait dplyr::collect(cmp_slim_computed) : les logicals R pèsent 4 octets chacun → 4 M lignes × 125 colonnes = ~2 Go de RAM R, 32× le chiffre du commentaire. C'est précisément le cas d'usage « Parquet plus gros que la RAM » mis en avant par le package : le verdict lui-même peut faire exploser la mémoire alors que toute l'info nécessaire au cas vert tient dans T+E scalaires.
Reprex (dimensionnement)
# Coût mémoire du collect slim : N x (T+E) x 4 octets
N <- 4e6; cols <- 125
N * cols * 4 / 1e9 # ~2 Go de RAM R pour le seul verdict
# Alternative : agrégat SQL par colonne -> (T+E) paires (n, n_failed) = ~1 Ko
Critères de succès
- Le verdict, la coverage et les colonnes en échec sont dérivés d'agrégats SQL par colonne (
SELECT COUNT(*) - SUM(CASE WHEN ok THEN 1 ELSE 0 END) ...en un scan DB) au lieu du collect intégral des booléens. - Seules les colonnes en échec (et leurs lignes en échec si extraits demandés) sont collectées pour l'agent pointblank.
- Cas vert lazy : consommation RAM R plafonnée à O(colonnes), indépendante de N (test avec profil mémoire ou assertion sur la taille des objets).
- Verdicts inchangés (équivalence DuckDB + SQLite), bench lazy dev/bench non dégradé.
- Le commentaire du code correspond à nouveau à la réalité.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in R/compare_datasets_from_yaml.R at the lazy cmp_for_agent construction and inspect the current collect(cmp_slim_computed) path. Compare DuckDB and SQLite behavior, then verify that verdicts, coverage, and failed columns come from per-column SQL aggregates while only failed data is collected. Use the lazy dev/bench and memory profile or object-size assertion to confirm RAM is independent of row count.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- r, sqlite
- Domain
- databases, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100