You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
During the scientific 4-engine benchmark on Bowlogna (1.23M triples, 17 queries) comparing Corese 4.6.5, Corese v5, Apache Jena 6.2.0, and Eclipse RDF4J 5.3.2:
Corese v5 achieved major speedups on multi-joins/Top-K queries (Q13 /20, Q7 at 1ms, Q11 at 1ms), but experienced a 2.2x regression on Q8 (1,830ms vs 814ms v4 and 220ms RDF4J).
Ingestion of Department0.nt was ~8x slower than Jena/RDF4J (36-45s vs 4.5s) due to per-line ANTLR4 ParseTree allocations.
Objectives & Deliverables
Phase A1 — DISTINCT bypass on GROUP BY: Skip redundant getDistinct() hash table when all GROUP BY variables are projected in SELECT (W3C SPARQL 1.1 compliant). [Completed - commit ce65602]
Phase D — Fast N-Triples Streaming Scanner: Replace per-line ANTLR NTriples.g4 parser with a zero-copy streaming scanner in NTriplesParser.java (cutting load time from 45.5s down to 11.1s, 100% W3C compliant across 70 tests). [Completed - commit 16c79d4]
Phase C — Cost-Based Optimizer (CBO) & Dynamic Join Ordering: Recompute join costs at each step taking bound variables into account (SPO probe vs unbounded scan).
Phase B — Streaming HashAggregation: Optimize Group.java to avoid sort-based grouping and reduce memory pressure on large result sets.
Le patch CBO dynamique a été commité et poussé (195607694).
Réalisations techniques :
Recalcul dynamique du coût effectif : lors de la sélection gloutonne des patterns dans CardinalityPatternOrdering.java, le coût d'un pattern candidat est réévalué à chaque étape en fonction des variables déjà liées par les arêtes précédentes ou les scopes englobants.
Réduction proportionnelle sans débordement : utilisation de BigDecimal.movePointLeft() pour préserver la précision intégrale long :
Sujet lié : division par 0^3$ (réduction SPO index probe).
Objet lié : division par 10 (POS/OSP probe).
Prédicat variable lié : division par 10.
Constantes dans la requête : déjà comptabilisées dans baseCount (pas de double réduction).
Maintien de la connectivité en priorité absolue : les jointures connectées restent prioritaires sur les produits cartésiens non connectés.
Tests & Qualité :
33/33 tests unitaires CardinalityQueryPlannerTest passent (9 nouveaux tests de régression, précision et tie-breaking).
Activity
remiceres commentedon Oct 20, 2026
Progress Update (Phase D - High-Throughput Streaming Ingestion)
NTriplesParserandNQuadsParser.NTriples.g4,NQuads.g4,NTriplesListener.java,NQuadsListener.java, andLineRDFParser.java.Department0.nt) dropped from 45.5s down to 11.1s (4x speedup, 136k triples/s parsing into live 3-index SPO/POS/OSP storage).16c79d432(N-Triples) andf512e8740(N-Quads) pushed toperf/engine-optimizer-and-bulk-loader.perf(engine): dynamic cost-based join reordering in CardinalityPatter…
remiceres commentedon Oct 20, 2026
⚡ Phase C Validée & Mergée : CBO Dynamic Cost-Based Join Reordering
Le patch CBO dynamique a été commité et poussé (
195607694).Réalisations techniques :
CardinalityPatternOrdering.java, le coût d'un pattern candidat est réévalué à chaque étape en fonction des variables déjà liées par les arêtes précédentes ou les scopes englobants.BigDecimal.movePointLeft()pour préserver la précision intégralelong:baseCount(pas de double réduction).CardinalityQueryPlannerTestpassent (9 nouveaux tests de régression, précision et tie-breaking).corese-core: 100% succès.Impact Benchmark Bowlogna (1,23M triplets) :
remiceres commentedon Oct 20, 2026
Résolu et clôturé par le merge de la PR #634 dans feature/corese-next.