仅使用ORM2进行一些性能测试,并且似乎速度慢了4倍,而不是直接使用SQL查询。有任何想法吗?
https://github.com/gmaggiotti/rule-restapi/tree/orm-poc
使用ORM2
基准测试Document Path: /rules/
Document Length: 6355 bytes
Concurrency Level: 100
Time taken for tests: 5.745 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 6484000 bytes
HTML transferred: 6355000 bytes
Requests per second: 174.06 [#/sec] (mean)
Time per request: 574.526 [ms] (mean)
Time per request: 5.745 [ms] (mean, across all concurrent requests)
Transfer rate: 1102.13 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 2
Processing: 118 552 83.1 555 857
Waiting: 116 552 83.1 555 857
Total: 119 552 83.0 555 857
仅使用SQL
基准Document Path: /rules/
Document Length: 6355 bytes
Concurrency Level: 100
Time taken for tests: 1.630 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 6484000 bytes
HTML transferred: 6355000 bytes
Requests per second: 613.38 [#/sec] (mean)
Time per request: 163.032 [ms] (mean)
Time per request: 1.630 [ms] (mean, across all concurrent requests)
Transfer rate: 3883.92 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 2
Processing: 98 158 49.2 137 361
Waiting: 98 158 49.2 137 361
Total: 98 158 49.4 137 362
不确定这是一个答案,但要发表评论太长。
(根据我的经验)在每个语言/平台上,对于每个ORM都是正确的。通常,您不使用ORMS进行查询性能,而是将其用于代码维护优化和开发人员速度。
为什么这样?好吧,通常,Orms必须将您在语言X中所说的内容转换为SQL,这样做通常不会提出最优化的查询。他们通常会飞行进行查询生成,因此(理想参数化的)SQL的字符串的实际"构建"需要少量时间,对本机代码对象的结构进行了反思,以找出什么右列名等。
许多Orms也不完全是决定性的,这也意味着,基础数据库在缓存查询计划的困难时期比其他可能的时间更难。另外,我在您提供的链接中找不到您的实际基准测试;您可能实际上并不是要对苹果进行测量。
因此,我无法专门为您使用的特定模块而没有花费时间比我所愿意的,但总的来说,我会因为上述原因而劝阻这一问题。我经常使用的工作流程是使用ORM进行所有开发,并担心一旦我可以进行一些生产时间分析,而担心优化查询等,那时,我将用直接的SQL替换最坏的罪犯或可能存储的过程或视图(取决于数据库引擎),以提高实际重要的性能。