Files
LabDataStorageEvaluation/docs/specs/08_benchmark_queries.md
administrator b173ac82a9 fix(docs): fix formatting issues in README.md
- adapt meta-/code-/obs- rules to the local Python benchmark pipeline
- replace db-sql-ddl, code-config-env-scope, test-e2e-pytest with pipeline equivalents
- add code-python-style, data-determinism, data-naming-units, bench-methodology, build-pipeline-tasks
- normalize specs and README typography to ASCII per code-data-formatting
- rewrite root CLAUDE.md trigger table; add .cursorrules and .gitignore
- specs: pipeline plan and task specs 00-11
- rules: 19 binding rule files adapted for this project
- docs: CLAUDE.md rule-trigger table
- config: .cursorrules commit convention, .gitignore excluding out/ and .venv/
- docs: rewrite README.md with pipeline diagrams, setup guide, result placeholders
- config: requirements.txt for the closed dependency list
- datagen: make_lab_config.py writes out/config/lab_config.yaml and .done marker
2026-07-11 13:39:13 -04:00

2.1 KiB
Raw Permalink Blame History

08 - Benchmark Query Definitions (Q1-Q7 × 5 formats)

Context / Goal

Define the 7 laboratory-standard retrieval scenarios and their concrete implementation for each of the 5 formats. Every implementation must return identical result sets (validated by checksum of sorted result rows, tolerance 1e-9 on floats).

Dependencies

04, 05, 06, 07 (all stores populated) + 03 (CSV baseline).

Scenarios

ID Scenario Result shape
Q1 COF vs cycle curve for one track (B722-W2-C13-T2) 1,000 rows (cycle, cof)
Q2 Steady-state COF for all coupons with mean Au = 10 ± 0.5 wt% ~dozens of rows (coupon, env, cof_ss)
Q3 Hardness vs steady-state COF across all batches (join nano × track_summary) 480 rows
Q4 Tracks in Dry N2, load 100 mN, cof_ss > 0.20 (anomaly filter) filtered rows
Q5 Mean run-in cycles per batch (aggregation over ALL cycle rows, no summary tables allowed - force the full scan) 4 rows
Q6 Wear volume vs load per coupon (join wear × tracks × coupons) 480 rows
Q7 Stribeck-style aggregation: mean COF grouped by (environment, speed·load bucket) over all cycles past run-in ~10 rows

Implementations

  • CSV: pure Python + csv module streaming (pandas allowed only as a second measured variant, labeled separately). Q1 = direct path read (this is the honest CSV strength). Q2-Q7 = directory walks + programmatic joins.
  • JSON: variant FULL, ijson streaming parser; Q1 = load the single coupon file.
  • SQLite: SQL over tribo.db, cold and warm cache runs (PRAGMA cache_size default; drop OS cache not required, just report both run 1 and run 3).
  • PostgreSQL: SQL, EXPLAIN (ANALYZE, BUFFERS) captured alongside; parallel workers default.
  • RDF: SPARQL against the populated store; capture query text.
  • Q5 rule applies to all formats: query raw cycle data, not track_summary.

Output

  • ./out/bench/queries/ - one subfolder per format with 7 runnable query files (q1.sql, q1.sparql, q1.py, ...).
  • ./out/bench/expected/q<N>.sha256 - canonical result checksums (computed once from PostgreSQL, cross-validated against SQLite).
  • Marker ./out/.done/08.ok.