prisma-engines
prisma-engines copied to clipboard
Preparatory support for multi-file schema introspection
Overview
- Adds multi-schema support for introspection
-
Datamodelnow registers models, composite types, views by file names -
DatasourceandGeneratorsnow storeFileId
-
- Multi-schema support is intentionally not exposed to the CLI yet
WASM Query Engine file Size
| Engine | This PR | Base branch | Diff |
|---|---|---|---|
| Postgres | 2.153MiB | 2.152MiB | 32.000B |
| Postgres (gzip) | 846.060KiB | 845.830KiB | 236.000B |
| Mysql | 2.119MiB | 2.119MiB | 43.000B |
| Mysql (gzip) | 831.749KiB | 831.749KiB | 0.000B |
| Sqlite | 2.015MiB | 2.015MiB | 43.000B |
| Sqlite (gzip) | 793.080KiB | 793.155KiB | -77.000B |
CodSpeed Performance Report
Merging #4847 will not alter performance
Comparing feat/multi-file-introspection (28c8f38) with main (2a74da1)
Summary
✅ 11 untouched benchmarks
✅ WASM query-engine performance won't change substantially (1.005x)
Full benchmark report
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/bench?schema=imdb_bench&sslmode=disable" \
node --experimental-wasm-modules query-engine/driver-adapters/executor/dist/bench.mjs
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
cpu: AMD EPYC 7763 64-Core Processor
runtime: node v18.20.2 (x64-linux)
benchmark time (avg) (min … max) p75 p99 p999
-------------------------------------------------------------- -----------------------------
• movies.findMany() (all - ~50K)
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline 376 ms/iter (373 ms … 380 ms) 379 ms 380 ms 380 ms
Web Assembly: Latest 460 ms/iter (457 ms … 468 ms) 464 ms 468 ms 468 ms
Web Assembly: Current 459 ms/iter (454 ms … 465 ms) 462 ms 465 ms 465 ms
Node API: Current 201 ms/iter (193 ms … 208 ms) 208 ms 208 ms 208 ms
summary for movies.findMany() (all - ~50K)
Web Assembly: Current
2.28x slower than Node API: Current
1.22x slower than Web Assembly: Baseline
1x faster than Web Assembly: Latest
• movies.findMany({ take: 2000 })
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline 15'508 µs/iter (15'171 µs … 18'158 µs) 15'565 µs 18'158 µs 18'158 µs
Web Assembly: Latest 18'965 µs/iter (18'738 µs … 19'385 µs) 19'081 µs 19'385 µs 19'385 µs
Web Assembly: Current 18'839 µs/iter (18'701 µs … 19'228 µs) 18'864 µs 19'228 µs 19'228 µs
Node API: Current 8'706 µs/iter (8'301 µs … 9'138 µs) 8'860 µs 9'138 µs 9'138 µs
summary for movies.findMany({ take: 2000 })
Web Assembly: Current
2.16x slower than Node API: Current
1.21x slower than Web Assembly: Baseline
1.01x faster than Web Assembly: Latest
• movies.findMany({ where: {...}, take: 2000 })
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline 2'390 µs/iter (2'231 µs … 3'612 µs) 2'365 µs 3'443 µs 3'612 µs
Web Assembly: Latest 2'957 µs/iter (2'777 µs … 4'948 µs) 2'926 µs 4'685 µs 4'948 µs
Web Assembly: Current 2'901 µs/iter (2'769 µs … 3'724 µs) 2'895 µs 3'609 µs 3'724 µs
Node API: Current 1'448 µs/iter (1'352 µs … 1'918 µs) 1'448 µs 1'804 µs 1'918 µs
summary for movies.findMany({ where: {...}, take: 2000 })
Web Assembly: Current
2x slower than Node API: Current
1.21x slower than Web Assembly: Baseline
1.02x faster than Web Assembly: Latest
• movies.findMany({ include: { cast: true } take: 2000 }) (m2m)
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline 583 ms/iter (573 ms … 598 ms) 588 ms 598 ms 598 ms
Web Assembly: Latest 781 ms/iter (775 ms … 797 ms) 791 ms 797 ms 797 ms
Web Assembly: Current 787 ms/iter (778 ms … 811 ms) 804 ms 811 ms 811 ms
Node API: Current 489 ms/iter (479 ms … 506 ms) 505 ms 506 ms 506 ms
summary for movies.findMany({ include: { cast: true } take: 2000 }) (m2m)
Web Assembly: Current
1.61x slower than Node API: Current
1.35x slower than Web Assembly: Baseline
1.01x slower than Web Assembly: Latest
• movies.findMany({ where: {...}, include: { cast: true } take: 2000 }) (m2m)
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline 82'061 µs/iter (81'486 µs … 82'445 µs) 82'410 µs 82'445 µs 82'445 µs
Web Assembly: Latest 112 ms/iter (111 ms … 112 ms) 112 ms 112 ms 112 ms
Web Assembly: Current 111 ms/iter (111 ms … 112 ms) 112 ms 112 ms 112 ms
Node API: Current 66'729 µs/iter (65'889 µs … 68'458 µs) 67'395 µs 68'458 µs 68'458 µs
summary for movies.findMany({ where: {...}, include: { cast: true } take: 2000 }) (m2m)
Web Assembly: Current
1.67x slower than Node API: Current
1.36x slower than Web Assembly: Baseline
1x faster than Web Assembly: Latest
• movies.findMany({ take: 2000, include: { cast: { include: { person: true } } } })
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline 1'028 ms/iter (1'023 ms … 1'035 ms) 1'030 ms 1'035 ms 1'035 ms
Web Assembly: Latest 1'312 ms/iter (1'296 ms … 1'330 ms) 1'323 ms 1'330 ms 1'330 ms
Web Assembly: Current 1'327 ms/iter (1'314 ms … 1'341 ms) 1'338 ms 1'341 ms 1'341 ms
Node API: Current 902 ms/iter (884 ms … 918 ms) 916 ms 918 ms 918 ms
summary for movies.findMany({ take: 2000, include: { cast: { include: { person: true } } } })
Web Assembly: Current
1.47x slower than Node API: Current
1.29x slower than Web Assembly: Baseline
1.01x slower than Web Assembly: Latest
• movie.findMany({ where: { ... }, take: 2000, include: { cast: { include: { person: true } } } })
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline 148 ms/iter (147 ms … 151 ms) 149 ms 151 ms 151 ms
Web Assembly: Latest 187 ms/iter (185 ms … 192 ms) 191 ms 192 ms 192 ms
Web Assembly: Current 191 ms/iter (189 ms … 192 ms) 192 ms 192 ms 192 ms
Node API: Current 116 ms/iter (114 ms … 117 ms) 117 ms 117 ms 117 ms
summary for movie.findMany({ where: { ... }, take: 2000, include: { cast: { include: { person: true } } } })
Web Assembly: Current
1.64x slower than Node API: Current
1.28x slower than Web Assembly: Baseline
1.02x slower than Web Assembly: Latest
• movie.findMany({ where: { reviews: { author: { ... } }, take: 100 }) (to-many -> to-one)
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline 1'043 µs/iter (979 µs … 1'588 µs) 1'039 µs 1'541 µs 1'588 µs
Web Assembly: Latest 1'394 µs/iter (1'321 µs … 2'253 µs) 1'386 µs 2'005 µs 2'253 µs
Web Assembly: Current 1'409 µs/iter (1'310 µs … 2'198 µs) 1'406 µs 1'926 µs 2'198 µs
Node API: Current 767 µs/iter (695 µs … 1'380 µs) 793 µs 846 µs 1'380 µs
summary for movie.findMany({ where: { reviews: { author: { ... } }, take: 100 }) (to-many -> to-one)
Web Assembly: Current
1.84x slower than Node API: Current
1.35x slower than Web Assembly: Baseline
1.01x slower than Web Assembly: Latest
• movie.findMany({ where: { cast: { person: { ... } }, take: 100 }) (m2m -> to-one)
-------------------------------------------------------------- -----------------------------
Web Assembly: Baseline 1'027 µs/iter (981 µs … 1'691 µs) 1'031 µs 1'416 µs 1'691 µs
Web Assembly: Latest 1'351 µs/iter (1'301 µs … 1'880 µs) 1'360 µs 1'714 µs 1'880 µs
Web Assembly: Current 1'385 µs/iter (1'332 µs … 2'078 µs) 1'387 µs 1'857 µs 2'078 µs
Node API: Current 805 µs/iter (729 µs … 1'218 µs) 812 µs 869 µs 1'218 µs
summary for movie.findMany({ where: { cast: { person: { ... } }, take: 100 }) (m2m -> to-one)
Web Assembly: Current
1.72x slower than Node API: Current
1.35x slower than Web Assembly: Baseline
1.03x slower than Web Assembly: Latest
After changes in 28c8f385a1ce7123885abc21a6f3d643e3413e3f