python-jsonschema / python-jsonschema/referencing
Performance of referencing library vs deprecated jsonschema.RefResolver is very bad when there are a lot of references in schema
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 53
- Fork
- 27
- Merge medio
- 1g 8h
- PR unite (30g)
- 8
Descrizione
Hello!
I have a library that formats scientific data into a JSON schema called the Allotrope Standard Model (ASM)
The validation schemas are fairly large and complicated compared to other schemas I've seen in discussion boards, and are very modular, meaning there are a lot of references. In allotropy we store the ASM schemas directly, and remove all remote references, replacing them with local references under $defs.
We are finding that validating against the schemas using jsonschema version 4.18.0 takes ~20x longer than 4.17.0.
As a concrete example:
Validating this data: https://raw.githubusercontent.com/Benchling-Open-Source/allotropy/refs/heads/main/tests/parsers/moldev_softmax_pro/testdata/MD_SMP_luminescence_endpoint_example08.json
Against this schema: https://github.com/Benchling-Open-Source/allotropy/blob/main/src/allotropy/allotrope/schemas/adm/plate-reader/REC/2024/06/plate-reader.schema.json
takes ~3.5s on 4.17.0 and ~55s on 4.18.0
This translates to a runtime for all 26 tests in tests/parsers/moldev_softmax_pro of ~30s in 4.17.0 to ~6m in 4.18.0
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Riproduci il caso di validazione segnalato usando i dati di test e lo schema di plate-reader collegati, confrontando jsonschema 4.17.0 con 4.18.0. Inizia da tests/parsers/moldev_softmax_pro e dal suo runtime di 26 test, quindi segui il percorso di referenziamento e validazione per identificare la regressione. Il lavoro è concluso quando la causa è isolata e lo schema con riferimenti grandi non mostra più il rallentamento segnalato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- performance
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 52/100