!NB Prisma connection options for stable work: schema=public&connection_limit=10&pool_timeout=20
50_000 queries in await Promise.all() ("SELECT email FROM users WHERE users.id = $1") with random users.id
10 separately times
┌───────────────────┬───────────────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬───────────┐
│ orm db │ avg query per sec | 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ avg │
├───────────────────┼───────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────┤
│ pg.pool | 10087 | 4997ms | 4970ms | 4972ms | 4962ms | 4926ms | 4954ms | 4944ms | 4932ms | 4946ms | 4967ms | 4957.0ms |
│ drizzle-orm | 8614 | 5810ms | 5799ms | 5783ms | 5832ms | 5815ms | 5790ms | 5795ms | 5802ms | 5812ms | 5808ms | 5804.6ms |
│ @js-ak/db-manager | 9648 | 5211ms | 5184ms | 5186ms | 5196ms | 5170ms | 5175ms | 5171ms | 5176ms | 5170ms | 5184ms | 5182.3ms |
│ @prisma/client | 16432 | 3152ms | 3008ms | 2999ms | 2966ms | 3027ms | 3269ms | 2998ms | 3007ms | 2996ms | 3006ms | 3042.8ms |
│ sequelize | 8335 | 6001ms | 6098ms | 5944ms | 5993ms | 6006ms | 6007ms | 6056ms | 5954ms | 5926ms | 6003ms | 5998.8ms |
│ typeorm | 7923 | 6306ms | 6292ms | 6298ms | 6256ms | 6355ms | 6346ms | 6324ms | 6307ms | 6295ms | 6328ms | 6310.7ms |
│ mikro-orm | 6921 | 7239ms | 7230ms | 7222ms | 7287ms | 7194ms | 7170ms | 7268ms | 7140ms | 7243ms | 7248ms | 7224.1ms |
│ objection.js | 7481 | 6714ms | 6629ms | 6634ms | 6705ms | 6748ms | 6689ms | 6765ms | 6723ms | 6631ms | 6594ms | 6683.2ms |
│ kysely | 9291 | 5368ms | 5375ms | 5382ms | 5429ms | 5383ms | 5360ms | 5365ms | 5411ms | 5383ms | 5361ms | 5381.7ms |
└───────────────────┴───────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────────┘
50_000 queries in await one by one in for loop ("SELECT email FROM users WHERE users.id = $1") with random users.id
10 separately times
┌───────────────────┬───────────────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬───────────┐
│ orm db │ avg query per sec | 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ avg │
├───────────────────┼───────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────┤
│ pg.pool | 10007 | 5014ms | 5021ms | 5004ms | 5013ms | 4980ms | 5004ms | 4979ms | 4987ms | 4988ms | 4976ms | 4996.6ms |
│ drizzle-orm | 9225 | 5512ms | 5440ms | 5507ms | 5463ms | 5398ms | 5292ms | 5465ms | 5385ms | 5396ms | 5341ms | 5419.9ms |
│ @js-ak/db-manager | 9594 | 5202ms | 5173ms | 5201ms | 5222ms | 5232ms | 5225ms | 5213ms | 5245ms | 5207ms | 5196ms | 5211.6ms |
│ @prisma/client | 3570 | 13870ms | 13835ms | 13563ms | 14639ms | 14252ms | 14173ms | 14054ms | 14199ms | 13641ms | 13824ms | 14005.0ms |
│ sequelize | 8343 | 5956ms | 6001ms | 6026ms | 5996ms | 5956ms | 6020ms | 5983ms | 6035ms | 5961ms | 5994ms | 5992.8ms |
│ typeorm | 7895 | 6410ms | 6342ms | 6324ms | 6296ms | 6342ms | 6323ms | 6364ms | 6292ms | 6320ms | 6316ms | 6332.9ms |
│ mikro-orm | 6887 | 7135ms | 7302ms | 7318ms | 7225ms | 7251ms | 7277ms | 7297ms | 7256ms | 7249ms | 7291ms | 7260.1ms |
│ objection.js | 8622 | 5875ms | 5805ms | 5779ms | 5732ms | 5792ms | 5779ms | 5863ms | 5726ms | 5823ms | 5816ms | 5799.0ms |
│ kysely | 9230 | 5435ms | 5421ms | 5430ms | 5398ms | 5390ms | 5418ms | 5415ms | 5438ms | 5416ms | 5410ms | 5417.1ms |
└───────────────────┴───────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────────┘
50_000 users
10 separately times
┌───────────────────┬───────────────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬───────────┐
│ orm db │ avg query per sec | 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ avg │
├───────────────────┼───────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────┤
│ pg.pool | 8195 | 9542ms | 5815ms | 5713ms | 5663ms | 5672ms | 5721ms | 5753ms | 5671ms | 5709ms | 5751ms | 6101.0ms |
│ drizzle-orm | 6627 | 10453ms | 7060ms | 7145ms | 7391ms | 7223ms | 7264ms | 7238ms | 7126ms | 7318ms | 7229ms | 7544.7ms |
│ @js-ak/db-manager | 7580 | 11116ms | 6138ms | 6019ms | 5952ms | 6065ms | 6181ms | 6101ms | 6087ms | 6143ms | 6164ms | 6596.6ms |
│ @prisma/client | 2686 | 22418ms | 18208ms | 18486ms | 17819ms | 18024ms | 18045ms | 18296ms | 18650ms | 17735ms | 18461ms | 18614.2ms |
│ typeorm | 6106 | 11839ms | 7743ms | 7600ms | 7752ms | 7739ms | 7790ms | 7912ms | 7912ms | 7814ms | 7784ms | 8188.5ms |
└───────────────────┴───────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────────┘
50_000 users
10 separately times
┌───────────────────┬───────────────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬───────────┐
│ orm db │ avg query per sec | 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ avg │
├───────────────────┼───────────────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼───────────┤
│ pg.pool | 9128 | 6824ms | 5273ms | 5280ms | 5348ms | 5297ms | 5318ms | 5348ms | 5315ms | 5407ms | 5366ms | 5477.6ms |
│ drizzle-orm | 4376 | 13587ms | 11201ms | 11122ms | 10958ms | 10749ms | 11337ms | 11203ms | 10785ms | 11319ms | 12003ms | 11426.4ms |
│ @js-ak/db-manager | 8235 | 7578ms | 5852ms | 5912ms | 5810ms | 5884ms | 5960ms | 5844ms | 5807ms | 5852ms | 6216ms | 6071.5ms |
│ @prisma/client | 9910 | 7026ms | 4883ms | 4771ms | 4725ms | 4876ms | 4797ms | 4836ms | 4910ms | 4848ms | 4780ms | 5045.2ms |
│ typeorm | 5073 | 11490ms | 9835ms | 9697ms | 9753ms | 9588ms | 9656ms | 9577ms | 9665ms | 9719ms | 9575ms | 9855.5ms |
└───────────────────┴───────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────────┘