prisma-engines icon indicating copy to clipboard operation
prisma-engines copied to clipboard

Preparatory support for multi-file schema introspection

Open Weakky opened this issue 1 year ago • 3 comments

Overview

  • Adds multi-schema support for introspection
    • Datamodel now registers models, composite types, views by file names
    • Datasource and Generators now store FileId
  • Multi-schema support is intentionally not exposed to the CLI yet

Weakky avatar Apr 30 '24 18:04 Weakky

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

github-actions[bot] avatar Apr 30 '24 18:04 github-actions[bot]

CodSpeed Performance Report

Merging #4847 will not alter performance

Comparing feat/multi-file-introspection (28c8f38) with main (2a74da1)

Summary

✅ 11 untouched benchmarks

codspeed-hq[bot] avatar Apr 30 '24 18:04 codspeed-hq[bot]

✅ 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

github-actions[bot] avatar Apr 30 '24 18:04 github-actions[bot]