
2007-7-17 19:17
wps2000
Zend_Db_Table 缓存 Metadata会变得更加糟糕?
那位已经做了ZF东西的也测试测试,如手册所说,我以为对Metadata缓存之后会提高执行效率,但是结果却正好相反
在index.php中添加一行。。。。
Zend_Db_Table::setDefaultMetadataCache(Zend_Cache::factory('Core', 'File', array( 'lifetime' => 7200,
'automatic_serialization' => true), array( 'cache_dir' => '../Cache/Table')));
测试执行效率发现有明显的降低
测试:
未添加Cache:
Concurrency Level: 30
Time taken for tests: 73.453125 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Total transferred: 1320500 bytes
HTML transferred: 1131500 bytes
Requests per second: 6.81 [#/sec] (mean)
Time per request: 4407.188 [ms] (mean)
Time per request: 146.906 [ms] (mean, across all concurrent requests)
Transfer rate: 17.55 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 2.2 0 15
Processing: 578 4326 695.2 4390 6468
Waiting: 562 4318 694.5 4375 6453
Total: 578 4327 695.3 4390 6468
Percentage of the requests served within a certain time (ms)
50% 4390
66% 4453
75% 4515
80% 4562
90% 4718
95% 5140
98% 6234
99% 6375
100% 6468 (longest request)
添加后:
Concurrency Level: 30
Time taken for tests: 85.250000 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Total transferred: 1320500 bytes
HTML transferred: 1131500 bytes
Requests per second: 5.87 [#/sec] (mean)
Time per request: 5115.000 [ms] (mean)
Time per request: 170.500 [ms] (mean, across all concurrent requests)
Transfer rate: 15.12 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 2.1 0 15
Processing: 2968 5037 415.6 5156 5562
Waiting: 2953 5030 417.3 5140 5546
Total: 2968 5038 415.7 5156 5562
Percentage of the requests served within a certain time (ms)
50% 5156
66% 5203
75% 5218
80% 5250
90% 5296
95% 5328
98% 5406
99% 5406
100% 5562 (longest request)
难道Cache只能使用memcache才是有意义的?
2007-7-17 19:22
wps2000
PS:Zend Framework的这个表现也真是不敢恭维!
OS: Windows XP
CPU: AMD Athlon 64 X2 Dual Core Processor 3600+ 1.91GHz
RAM:1.00GB
PHP:5.23
Op Cache: X-Cache 1.21
Apache: Apache 2.059
这个配置也不算糟糕了吧,居然这么慢。。。。。。。
2007-7-17 19:24
wps2000
同样的页面,没有采用Zend_Framework 可以达到
Concurrency Level: 30
Time taken for tests: 7.156250 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Total transferred: 1211500 bytes
HTML transferred: 1130000 bytes
Requests per second: 69.87 [#/sec] (mean)
Time per request: 429.375 [ms] (mean)
Time per request: 14.313 [ms] (mean, across all concurrent requests)
Transfer rate: 165.31 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 3.0 0 15
Processing: 62 414 60.1 421 515
Waiting: 62 288 80.8 296 453
Total: 62 414 60.2 421 515
Percentage of the requests served within a certain time (ms)
50% 421
66% 437
75% 437
80% 453
90% 453
95% 484
98% 500
99% 500
100% 515 (longest request)
2007-7-17 19:26
sxpo
我也用了,简单的测了下时间,快得不多,但确实少查了一次数据库
期待高手来回答,关注
2007-7-17 19:36
sxpo
楼主在2楼的话有点过激吧,按照你的逻辑,慢也是cache这种方法慢,和zf有啥直接关系?
另外我觉得cache的用处除了以空间换时间之外,更重要的是减少数据库连接次数,你要想速度快,可以做静态文件啊,
2007-7-17 23:04
Ken
楼主可否放出测试代码,以便他人重复实验
2007-7-18 00:13
mikespook
首先,要弄清楚 table metadata 是什么,再来做这个试验才有意义~~table metadata 具体信息手册上有说。
缓存减少了数据库查询。但是如果仅仅是缓存一个表的信息,但是动用 cache 功能,同样是巨大的消耗。也就是说减少数据库查询带来的性能提升不足以弥补 cache 功能所消耗的性能。
不过如果是缓存 100 个表的 metadata,或许结果就是另外一种情况了。
另外,框架不是为了让程序运行得更快,所以不使用 zf 比使用 zf 快。直接 query sql 方式比 table data gateway 方式快。
2007-7-18 12:46
wps2000
[quote]原帖由 [i]mikespook[/i] 于 2007-7-18 00:13 发表 [url=http://www.phpeye.com/bbs/redirect.php?goto=findpost&pid=440&ptid=100][img]http://www.phpeye.com/bbs/images/common/back.gif[/img][/url]
首先,要弄清楚 table metadata 是什么,再来做这个试验才有意义~~table metadata 具体信息手册上有说。
缓存减少了数据库查询。但是如果仅仅是缓存一个表的信息,但是动用 cache 功能,同样是巨大的消耗。也就是说减少数据库 ... [/quote]
既然我已经把这一行放在 index.php中了,自然是对所有表的 table metadata 进行了缓存。。。。。。。。。
[color=red]但是如果仅仅是缓存一个表的信息,但是动用 cache 功能,同样是巨大的消耗。???[/color]难道每个Request中你都要用到 100 张表?:L
缓存对每个用户请求来说都只会缓存几张表而已。。。。。
2007-7-18 12:47
wps2000
我从来没有指望过使用Zend Framework后会变快的哦:lol
只不过效率十倍的下降是无法接受的
2007-7-19 11:02
mikespook
那要看是一个什么样的系统,在我们的程序里每个 request 用到个 20、30 张表也是普通的情况~~~
主要是 cache 到底消耗了多少性能~~~缓存能解决一部分性能,但是同时也带来另一部分负载~~~如果不能抵消,那就会很慢~~~
特别是用文件的 cache 方式~~磁盘 IO、对象序列化这些都不是什么善主~~所以并不是缓存就一定快~~所以效率下降应该是一种可能的情况,而不是无法接受的情况。只是没用对地方,或者得不偿失~~
PS:不过我是不用Db_Table,并没有提升多少方便性,反而很难维护~~~毕竟没有自动维护工具,表关系这里维护起来就很困难。编写关系映射需要头脑清晰,同时调试也是个大麻烦。确定是自己的问题,还是框架本身的 bug 非常艰难。
2007-7-19 13:18
wps2000
[quote]不过我是不用Db_Table,并没有提升多少方便性,反而很难维护~~~毕竟没有自动维护工具,表关系这里维护起来就很困难。编写关系映射需要头脑清晰,同时调试也是个大麻烦。确定是自己的问题,还是框架本身的 bug 非常艰难。[/quote]
的确,Zend_Db_Table简直就是一个鸡肋!
不过Zend_Db还行,差不多可以代替ADODB
页:
[1]
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.