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
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 53
- Forks
- 27
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 8
Description
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
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
Reproduce the reported validation case using the linked test data and plate-reader schema, comparing jsonschema 4.17.0 with 4.18.0. Start with tests/parsers/moldev_softmax_pro and its 26-test runtime, then trace the referencing and validation path to identify the regression. Done means the cause is isolated and the large-reference schema no longer shows the reported slowdown.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100