- 浏览: 4821361 次
- 性别:
- 来自: 上海
博客专栏
-
robbin谈管理
浏览量:137055
文章分类
最新评论
-
xly1981:
领导者是团队的灵魂。深入一线的过程,包括代码review,能帮 ...
robbin谈管理:改造团队的经验(2) -
jiehuangwei:
像这种总结比较性的ppt文档可以多发啊
Web并发模型粗浅探讨 -
linux1308:
看完学习到了很多东西,感谢推荐!
推荐一篇很好的RoR部署方案性能评测 -
zweite:
直接对搜索的结果进行缓存是不是会更快一点呢
漫谈应用缓存的命中率问题 -
kaogua:
现在已经是ruby2.0了, 不知道这个的效率是怎么样的, 是 ...
Ruby作为服务器端应用已经成熟了
这篇文章源自于:
http://www.iteye.com/topic/77195
其中很多人谈到了缓存命中率的问题,应用缓存的命中率取决于很多的因素:
1、应用场景
是OLTP还是OLAP应用,即使是OLTP,也要看访问的频度,一个极少被访问到的缓存等于没有什么效果。一般来说,互联网网站是非常适合缓存应用的场景。
2、缓存的粒度
毫无疑问,缓存的粒度越小,命中率就越高,对象缓存是目前缓存粒度最小的,因此被命中的几率更高。举个例子来说吧:你访问当前这个页面,浏览帖子,那么对于ORM来说,需要发送n条SQL,取各自帖子user的对象。很显然,如果这个user在其他帖子里面也跟贴了,那么在访问那个帖子的时候,就可以直接从缓存里面取这个user对象了。
3、架构的设计
架构的设计对于缓存命中率也有至关重要的影响。例如你应该如何去尽量避免缓存失效的问题,如何尽量提供频繁访问数据的缓存问题,这些都是考验架构师水平的地方。再举个例子来说,对于论坛,需要记录每个topic的浏览次数,所以每次有人访问这个topic,那么topic表就要update一次,这意味着什么呢?对于topic的对象缓存是无效的,每次访问都要更新缓存。那么可以想一些办法,例如增加一个中间变量记录点击次数,每累计一定的点击,才更新一次数据库,从而减低缓存失效的频率。
4、缓存的容量和缓存的有效期
缓存太小,造成频繁的LRU,也会降低命中率,缓存的有效期太短也会造成缓存命中率下降。
所以缓存命中率问题不能一概而论,一定说命中率很低或者命中率很高。但是如果你对于缓存的掌握很精通,有意识的去调整应用的架构,去分解缓存的粒度,总是会带来很高的命中率的。
这里我可以举一个实际的案例,JavaEye2.0网站在使用对象缓存之前,通过MySQL的监控工具进行观察,在连续24小时的平均每秒发送SQL条数超过了200条,在使用对象缓存之后,连续24小时的平均每秒发送SQL条数下降到了120条左右,几乎下降了一半。
考虑到很多SQL都是分页语句,关联查询,条件查询,集合操作,都是不能被缓存的SQL,而真正能够被缓存的SQL只有根据主键查询对象和对象关联对象的查询。所以真正能够被缓存的SQL估计最多占所有SQL的60%。所以换算下来,应用缓存的命中率之高,已经相当惊人了。
不过这里要提醒的一点,有将近一半的SQL都被缓存,不意味着性能可以提升一倍。这是因为能够被缓存的都是按照主键查询单条记录的SQL,这些SQL本身即使发送到数据库,对数据库造成的压力也没有想像的那么大。真正对数据库造成庞大压力的正是那些没有索引的大表查询,和造成了全表扫描的关联查询,这些一旦涉及到全表扫描的查询,才是性能的真正杀手。当然了,不管怎么说,通过使用对象缓存,是毫无疑问可以大幅度降低数据库的负载压力的,有效提升web应用的性能的。
关于这一点,我再给出一组数据来加深大家的印象,通过使用操作系统网络工具进行统计:
JavaEye网站web server的端口每秒数据流量是2MB;
JavaEye网站的MySQL数据库端口的每秒数据流量是1.2MB;
而网站的memcached的端口每秒的数据流量高达5MB。
不过这里要提醒的一点,有将近一半的SQL都被缓存,不意味着性能可以提升一倍。这是因为能够被缓存的都是按照主键查询单条记录的SQL,这些SQL本身即使发送到数据库,对数据库造成的压力也没有想像的那么大。真正对数据库造成庞大压力的正是那些没有索引的大表查询,和造成了全表扫描的关联查询,这些一旦涉及到全表扫描的查询,才是性能的真正杀手。
深有感触,索引如果没建好,简直就是灾难,其它的优化都是空谈
memcached 有一个 stats 命令,可以查看到它自启动之后的一些统计值,里面有 命中次数(get_hits) 和 失败(get_misses) 次数。
对于论坛,大部分功能集中在list、byKey,count
其中count部分又属于易失性的,普通的对象缓存是不适合的,当然50个count(*)就更不适合了
这个可以靠业务逻辑相关的内存计数器来解决
用于分页的count不需要考虑易失性,大数据,频繁更新的数据,查询都是有一个短暂的有效性的,google也无法解决这个问题。100%的精确对于大数据量而且频繁更新的系统而言是不可能的
嗯。确实没有好办法解决分页的count这个问题以达到100%精确,我想是不是用户请求第一个页面的时候才去查询的总记录数。中间页面的话,就不去查询总记录?
对于论坛,大部分功能集中在list、byKey,count
其中count部分又属于易失性的,普通的对象缓存是不适合的,当然50个count(*)就更不适合了
这个可以靠业务逻辑相关的内存计数器来解决
用于分页的count不需要考虑易失性,大数据,频繁更新的数据,查询都是有一个短暂的有效性的,google也无法解决这个问题。100%的精确对于大数据量而且频繁更新的系统而言是不可能的
如果是用sql的话,虽然只是多了一个sql,但如果一个列表页显示50个帖子的话,就是多了50个sql
晕,这个是什么逻辑啊,我说的多一个SQL是取全部匹配的记录数,用于计算总共的页数,而且这个SQL是共通的,就是在正常的记录查询上包一层
一个列表显示50个帖子,这个也是一个SQL而已,如果是用hibernate的缓存机制的话,才可能是50次执行。
如果是用sql的话,虽然只是多了一个sql,但如果一个列表页显示50个帖子的话,就是多了50个sql
对于论坛,大部分功能集中在list、byKey,count
其中count部分又属于易失性的,普通的对象缓存是不适合的,当然50个count(*)就更不适合了
这个可以靠业务逻辑相关的内存计数器来解决
如果是用sql的话,虽然只是多了一个sql,但如果一个列表页显示50个帖子的话,就是多了50个sql
Java的缓存一般是有接口来进行统计的,可以自己编程来监控缓存的命中率。例如confluence自己就在后台提供了缓存命中率的统计监控数据。可以根据命中率来调整缓存大小。
如果是RoR去连接memcached,没有什么监控手段,那么我的办法也很直观,就是比较数据库的容量,如果数据库的数据容量达到了500MB,那么我就会给memcached开512MB的缓存空间。
robbin这个解释很清楚了。就是说对象缓存最起作用的是数据库无能为力的地方。
这点我完全同意。
那么另外一个疑问:
全表扫描是相当相当可怕的。也许在几万条记录的表里面还无所谓,但是如果是上百万条的表,那么一个select要等上十秒二十秒不算什么新闻。
可是,不管缓存如何,第一次总要query数据库的。那么用户在第一次的时候还是要经过漫长的等待的。这样似乎也不太理想。我总觉得遇到这种情况,最根本的解决方法是优化数据库,建索引也好,冗余也好,改变对象设计也好,总之目标是干掉全表扫描。而如果这么干了,那么回过头来,对象缓存的作用就又被稀释了。
全表的扫描不见得能够全部消除掉,很多时候还是不得不写全表扫描的SQL。
robbin这个解释很清楚了。就是说对象缓存最起作用的是数据库无能为力的地方。
这点我完全同意。
那么另外一个疑问:
全表扫描是相当相当可怕的。也许在几万条记录的表里面还无所谓,但是如果是上百万条的表,那么一个select要等上十秒二十秒不算什么新闻。
可是,不管缓存如何,第一次总要query数据库的。那么用户在第一次的时候还是要经过漫长的等待的。这样似乎也不太理想。我总觉得遇到这种情况,最根本的解决方法是优化数据库,建索引也好,冗余也好,改变对象设计也好,总之目标是干掉全表扫描。而如果这么干了,那么回过头来,对象缓存的作用就又被稀释了。
mod_rewrite 是可以的
谢谢,刚才查了文档,RewriteCond -s可以...
帖子太多,记不住,所以头就大了,所以就记住了......
谢谢robbin,跑题了,不好意思...
http://robbin.iteye.com/blog/66582
mod_rewrite 是可以的
偶是指不要把那么页数显示在分论坛的帖子列表中,在进入单个帖子的页面当然还是需要的。
另外,偶的小脑袋哪能记住几天前看到第几页这种OOXX的事情,还要记住谁在第几页的发言简直是@#¥%...这种大肠帖都是点开最后一页,然后依靠回复时间来找到大致位置
http://www.iteye.com/topic/77195
其中很多人谈到了缓存命中率的问题,应用缓存的命中率取决于很多的因素:
1、应用场景
是OLTP还是OLAP应用,即使是OLTP,也要看访问的频度,一个极少被访问到的缓存等于没有什么效果。一般来说,互联网网站是非常适合缓存应用的场景。
2、缓存的粒度
毫无疑问,缓存的粒度越小,命中率就越高,对象缓存是目前缓存粒度最小的,因此被命中的几率更高。举个例子来说吧:你访问当前这个页面,浏览帖子,那么对于ORM来说,需要发送n条SQL,取各自帖子user的对象。很显然,如果这个user在其他帖子里面也跟贴了,那么在访问那个帖子的时候,就可以直接从缓存里面取这个user对象了。
3、架构的设计
架构的设计对于缓存命中率也有至关重要的影响。例如你应该如何去尽量避免缓存失效的问题,如何尽量提供频繁访问数据的缓存问题,这些都是考验架构师水平的地方。再举个例子来说,对于论坛,需要记录每个topic的浏览次数,所以每次有人访问这个topic,那么topic表就要update一次,这意味着什么呢?对于topic的对象缓存是无效的,每次访问都要更新缓存。那么可以想一些办法,例如增加一个中间变量记录点击次数,每累计一定的点击,才更新一次数据库,从而减低缓存失效的频率。
4、缓存的容量和缓存的有效期
缓存太小,造成频繁的LRU,也会降低命中率,缓存的有效期太短也会造成缓存命中率下降。
所以缓存命中率问题不能一概而论,一定说命中率很低或者命中率很高。但是如果你对于缓存的掌握很精通,有意识的去调整应用的架构,去分解缓存的粒度,总是会带来很高的命中率的。
这里我可以举一个实际的案例,JavaEye2.0网站在使用对象缓存之前,通过MySQL的监控工具进行观察,在连续24小时的平均每秒发送SQL条数超过了200条,在使用对象缓存之后,连续24小时的平均每秒发送SQL条数下降到了120条左右,几乎下降了一半。
考虑到很多SQL都是分页语句,关联查询,条件查询,集合操作,都是不能被缓存的SQL,而真正能够被缓存的SQL只有根据主键查询对象和对象关联对象的查询。所以真正能够被缓存的SQL估计最多占所有SQL的60%。所以换算下来,应用缓存的命中率之高,已经相当惊人了。
不过这里要提醒的一点,有将近一半的SQL都被缓存,不意味着性能可以提升一倍。这是因为能够被缓存的都是按照主键查询单条记录的SQL,这些SQL本身即使发送到数据库,对数据库造成的压力也没有想像的那么大。真正对数据库造成庞大压力的正是那些没有索引的大表查询,和造成了全表扫描的关联查询,这些一旦涉及到全表扫描的查询,才是性能的真正杀手。当然了,不管怎么说,通过使用对象缓存,是毫无疑问可以大幅度降低数据库的负载压力的,有效提升web应用的性能的。
关于这一点,我再给出一组数据来加深大家的印象,通过使用操作系统网络工具进行统计:
JavaEye网站web server的端口每秒数据流量是2MB;
JavaEye网站的MySQL数据库端口的每秒数据流量是1.2MB;
而网站的memcached的端口每秒的数据流量高达5MB。
评论
25 楼
zweite
2014-02-08
直接对搜索的结果进行缓存是不是会更快一点呢
24 楼
lszone
2007-05-21
robbin 写道
不过这里要提醒的一点,有将近一半的SQL都被缓存,不意味着性能可以提升一倍。这是因为能够被缓存的都是按照主键查询单条记录的SQL,这些SQL本身即使发送到数据库,对数据库造成的压力也没有想像的那么大。真正对数据库造成庞大压力的正是那些没有索引的大表查询,和造成了全表扫描的关联查询,这些一旦涉及到全表扫描的查询,才是性能的真正杀手。
深有感触,索引如果没建好,简直就是灾难,其它的优化都是空谈
23 楼
iunknown
2007-05-17
downpour 写道
全表扫描真的很难避免,尤其是项目一大,参与的人一多,基本上随便挑一挑就能找出全表扫描的SQL。
我感觉缓存的容量是一个非常关键的数值,频繁的LRU几乎就是缓存的杀手。不知道Robbin在调整这个参数的时候是如何判断分析的。
我感觉缓存的容量是一个非常关键的数值,频繁的LRU几乎就是缓存的杀手。不知道Robbin在调整这个参数的时候是如何判断分析的。
memcached 有一个 stats 命令,可以查看到它自启动之后的一些统计值,里面有 命中次数(get_hits) 和 失败(get_misses) 次数。
bash-2.05a$ telnet 0 11211 stats STAT rusage_user 0.770000 STAT rusage_system 75.630000 STAT curr_items 291984 STAT total_items 500000 STAT cmd_get 500000 STAT cmd_set 500000 STAT get_hits 291984 STAT get_misses 208016 END
22 楼
叶子
2007-05-10
搜索的话,分页结果差异比较大很难确定,可如果是主题列表,回帖列表,那么不是结果很稳定么。
21 楼
julyboxer
2007-05-10
cherami 写道
kabbesy 写道
对于论坛,大部分功能集中在list、byKey,count
其中count部分又属于易失性的,普通的对象缓存是不适合的,当然50个count(*)就更不适合了
这个可以靠业务逻辑相关的内存计数器来解决
用于分页的count不需要考虑易失性,大数据,频繁更新的数据,查询都是有一个短暂的有效性的,google也无法解决这个问题。100%的精确对于大数据量而且频繁更新的系统而言是不可能的
嗯。确实没有好办法解决分页的count这个问题以达到100%精确,我想是不是用户请求第一个页面的时候才去查询的总记录数。中间页面的话,就不去查询总记录?
20 楼
cherami
2007-05-10
kabbesy 写道
对于论坛,大部分功能集中在list、byKey,count
其中count部分又属于易失性的,普通的对象缓存是不适合的,当然50个count(*)就更不适合了
这个可以靠业务逻辑相关的内存计数器来解决
用于分页的count不需要考虑易失性,大数据,频繁更新的数据,查询都是有一个短暂的有效性的,google也无法解决这个问题。100%的精确对于大数据量而且频繁更新的系统而言是不可能的
19 楼
cherami
2007-05-10
chenqj 写道
如果是用sql的话,虽然只是多了一个sql,但如果一个列表页显示50个帖子的话,就是多了50个sql
晕,这个是什么逻辑啊,我说的多一个SQL是取全部匹配的记录数,用于计算总共的页数,而且这个SQL是共通的,就是在正常的记录查询上包一层
一个列表显示50个帖子,这个也是一个SQL而已,如果是用hibernate的缓存机制的话,才可能是50次执行。
18 楼
kabbesy
2007-05-10
chenqj 写道
cherami 写道
显示分页并不会对性能或者缓存造成太大的麻烦,最多是多了一个SQL而已,取一个总体的记录数,这个可以通过开发架构解决。
如果不提供就极大的限制了功能,不能因为技术而对功能进行限制!
如果不提供就极大的限制了功能,不能因为技术而对功能进行限制!
如果是用sql的话,虽然只是多了一个sql,但如果一个列表页显示50个帖子的话,就是多了50个sql
对于论坛,大部分功能集中在list、byKey,count
其中count部分又属于易失性的,普通的对象缓存是不适合的,当然50个count(*)就更不适合了
这个可以靠业务逻辑相关的内存计数器来解决
17 楼
chenqj
2007-05-10
cherami 写道
显示分页并不会对性能或者缓存造成太大的麻烦,最多是多了一个SQL而已,取一个总体的记录数,这个可以通过开发架构解决。
如果不提供就极大的限制了功能,不能因为技术而对功能进行限制!
如果不提供就极大的限制了功能,不能因为技术而对功能进行限制!
如果是用sql的话,虽然只是多了一个sql,但如果一个列表页显示50个帖子的话,就是多了50个sql
16 楼
robbin
2007-05-10
downpour 写道
全表扫描真的很难避免,尤其是项目一大,参与的人一多,基本上随便挑一挑就能找出全表扫描的SQL。
我感觉缓存的容量是一个非常关键的数值,频繁的LRU几乎就是缓存的杀手。不知道Robbin在调整这个参数的时候是如何判断分析的。
我感觉缓存的容量是一个非常关键的数值,频繁的LRU几乎就是缓存的杀手。不知道Robbin在调整这个参数的时候是如何判断分析的。
Java的缓存一般是有接口来进行统计的,可以自己编程来监控缓存的命中率。例如confluence自己就在后台提供了缓存命中率的统计监控数据。可以根据命中率来调整缓存大小。
如果是RoR去连接memcached,没有什么监控手段,那么我的办法也很直观,就是比较数据库的容量,如果数据库的数据容量达到了500MB,那么我就会给memcached开512MB的缓存空间。
15 楼
cherami
2007-05-10
显示分页并不会对性能或者缓存造成太大的麻烦,最多是多了一个SQL而已,取一个总体的记录数,这个可以通过开发架构解决。
如果不提供就极大的限制了功能,不能因为技术而对功能进行限制!
如果不提供就极大的限制了功能,不能因为技术而对功能进行限制!
14 楼
downpour
2007-05-10
全表扫描真的很难避免,尤其是项目一大,参与的人一多,基本上随便挑一挑就能找出全表扫描的SQL。
我感觉缓存的容量是一个非常关键的数值,频繁的LRU几乎就是缓存的杀手。不知道Robbin在调整这个参数的时候是如何判断分析的。
我感觉缓存的容量是一个非常关键的数值,频繁的LRU几乎就是缓存的杀手。不知道Robbin在调整这个参数的时候是如何判断分析的。
13 楼
robbin
2007-05-09
ajoo 写道
robbin 写道
真正对数据库造成庞大压力的正是那些没有索引的大表查询,和造成了全表扫描的关联查询,这些一旦涉及到全表扫描的查询,才是性能的真正杀手。当然了,不管怎么说,通过使用对象缓存,是毫无疑问可以大幅度降低数据库的负载压力的,有效提升web应用的性能的。
关于这一点,我再给出一组数据来加深大家的印象,通过使用操作系统网络工具进行统计:
JavaEye网站web server的端口每秒数据流量是2MB;
JavaEye网站的MySQL数据库端口的每秒数据流量是1.2MB;
而网站的memcached的端口每秒的数据流量高达5MB。
关于这一点,我再给出一组数据来加深大家的印象,通过使用操作系统网络工具进行统计:
JavaEye网站web server的端口每秒数据流量是2MB;
JavaEye网站的MySQL数据库端口的每秒数据流量是1.2MB;
而网站的memcached的端口每秒的数据流量高达5MB。
robbin这个解释很清楚了。就是说对象缓存最起作用的是数据库无能为力的地方。
这点我完全同意。
那么另外一个疑问:
全表扫描是相当相当可怕的。也许在几万条记录的表里面还无所谓,但是如果是上百万条的表,那么一个select要等上十秒二十秒不算什么新闻。
可是,不管缓存如何,第一次总要query数据库的。那么用户在第一次的时候还是要经过漫长的等待的。这样似乎也不太理想。我总觉得遇到这种情况,最根本的解决方法是优化数据库,建索引也好,冗余也好,改变对象设计也好,总之目标是干掉全表扫描。而如果这么干了,那么回过头来,对象缓存的作用就又被稀释了。
全表的扫描不见得能够全部消除掉,很多时候还是不得不写全表扫描的SQL。
12 楼
ajoo
2007-05-09
robbin 写道
真正对数据库造成庞大压力的正是那些没有索引的大表查询,和造成了全表扫描的关联查询,这些一旦涉及到全表扫描的查询,才是性能的真正杀手。当然了,不管怎么说,通过使用对象缓存,是毫无疑问可以大幅度降低数据库的负载压力的,有效提升web应用的性能的。
关于这一点,我再给出一组数据来加深大家的印象,通过使用操作系统网络工具进行统计:
JavaEye网站web server的端口每秒数据流量是2MB;
JavaEye网站的MySQL数据库端口的每秒数据流量是1.2MB;
而网站的memcached的端口每秒的数据流量高达5MB。
关于这一点,我再给出一组数据来加深大家的印象,通过使用操作系统网络工具进行统计:
JavaEye网站web server的端口每秒数据流量是2MB;
JavaEye网站的MySQL数据库端口的每秒数据流量是1.2MB;
而网站的memcached的端口每秒的数据流量高达5MB。
robbin这个解释很清楚了。就是说对象缓存最起作用的是数据库无能为力的地方。
这点我完全同意。
那么另外一个疑问:
全表扫描是相当相当可怕的。也许在几万条记录的表里面还无所谓,但是如果是上百万条的表,那么一个select要等上十秒二十秒不算什么新闻。
可是,不管缓存如何,第一次总要query数据库的。那么用户在第一次的时候还是要经过漫长的等待的。这样似乎也不太理想。我总觉得遇到这种情况,最根本的解决方法是优化数据库,建索引也好,冗余也好,改变对象设计也好,总之目标是干掉全表扫描。而如果这么干了,那么回过头来,对象缓存的作用就又被稀释了。
11 楼
yfmine
2007-05-09
kdekid 写道
yfmine 写道
另外,想请问一下,对于新闻发布系统那种纯静态页面,apache有没有什么模块能判断静态页面是否存在,如果不存在,才给应用服务器发出请求呢?
mod_rewrite 是可以的
谢谢,刚才查了文档,RewriteCond -s可以...
Readonly 写道
另外,偶的小脑袋哪能记住几天前看到第几页这种OOXX的事情,还要记住谁在第几页的发言简直是@#¥%...这种大肠帖都是点开最后一页,然后依靠回复时间来找到大致位置
帖子太多,记不住,所以头就大了,所以就记住了......
robbin 写道
http://robbin.iteye.com/blog/66582
谢谢robbin,跑题了,不好意思...
10 楼
robbin
2007-05-09
yfmine 写道
robbin讲的都是对象缓存,想冒昧请问一下,javaeye使用了页面缓存吗?对于页面缓存,那么是算作粗粒度还是细粒度呢?这样做的也应该可以控制到比较高的命中率吧,和对象缓存相比,两者各有什么优劣,或者说两者一起使用是否能够做到比单纯的对象缓存更好呢?
在我们做过的一个web项目中,是通过模版生成伪静态页面,说它是伪静态,是因为这个页面本身也是一个模版,在生成最终页面呈现给用户时,会填入一些动态的数据,就比如这个论坛的投票数量什么的。相当于磁盘缓存了,但这个是应用服务器的本地磁盘,速度上很快,而且避免了服务器之间的网络通信。比如论坛里每个帖子的文章内容,不需要再去数据库或者缓存里取,这样是不是能减少与memcached通信的流量呢。
web应用多数都是查询大于数据操作,那么cache用于解决性能是屡试不爽,但是对于插入,更新频繁的企业应用,一般是应该从哪方面去解决的呢。
另外,想请教下对于新闻发布系统那种纯静态页面,apache有没有什么模块,可以判断静态页面是否存在,如果不存在,才给应用服务器发出请求
在我们做过的一个web项目中,是通过模版生成伪静态页面,说它是伪静态,是因为这个页面本身也是一个模版,在生成最终页面呈现给用户时,会填入一些动态的数据,就比如这个论坛的投票数量什么的。相当于磁盘缓存了,但这个是应用服务器的本地磁盘,速度上很快,而且避免了服务器之间的网络通信。比如论坛里每个帖子的文章内容,不需要再去数据库或者缓存里取,这样是不是能减少与memcached通信的流量呢。
web应用多数都是查询大于数据操作,那么cache用于解决性能是屡试不爽,但是对于插入,更新频繁的企业应用,一般是应该从哪方面去解决的呢。
另外,想请教下对于新闻发布系统那种纯静态页面,apache有没有什么模块,可以判断静态页面是否存在,如果不存在,才给应用服务器发出请求
http://robbin.iteye.com/blog/66582
9 楼
kdekid
2007-05-09
yfmine 写道
另外,想请问一下,对于新闻发布系统那种纯静态页面,apache有没有什么模块能判断静态页面是否存在,如果不存在,才给应用服务器发出请求呢?
mod_rewrite 是可以的
8 楼
yfmine
2007-05-09
robbin讲的都是对象缓存,想冒昧请问一下,javaeye使用了页面缓存吗?对于页面缓存,那么是算作粗粒度还是细粒度呢?这样做的也应该可以控制到比较高的命中率吧,和对象缓存相比,两者各有什么优劣,或者说两者一起使用是否能够做到比单纯的对象缓存更好呢?
在我们做过的一个web项目中,是通过模版生成伪静态页面,说它是伪静态,是因为这个页面本身也是一个模版,在生成最终页面呈现给用户时,会填入一些动态的数据,就比如这个论坛的投票数量什么的。相当于磁盘缓存了,但这个是应用服务器的本地磁盘,速度上很快,而且避免了服务器之间的网络通信。比如论坛里每个帖子的文章内容,不需要再去数据库或者缓存里取,这样是不是能减少与memcached通信的流量呢。
web应用多数都是查询大于数据操作,那么cache用于解决性能是屡试不爽,但是对于插入,更新频繁的企业应用,一般是应该从哪方面去解决的呢。
另外,想请教下对于新闻发布系统那种纯静态页面,apache有没有什么模块,可以判断静态页面是否存在,如果不存在,才给应用服务器发出请求
在我们做过的一个web项目中,是通过模版生成伪静态页面,说它是伪静态,是因为这个页面本身也是一个模版,在生成最终页面呈现给用户时,会填入一些动态的数据,就比如这个论坛的投票数量什么的。相当于磁盘缓存了,但这个是应用服务器的本地磁盘,速度上很快,而且避免了服务器之间的网络通信。比如论坛里每个帖子的文章内容,不需要再去数据库或者缓存里取,这样是不是能减少与memcached通信的流量呢。
web应用多数都是查询大于数据操作,那么cache用于解决性能是屡试不爽,但是对于插入,更新频繁的企业应用,一般是应该从哪方面去解决的呢。
另外,想请教下对于新闻发布系统那种纯静态页面,apache有没有什么模块,可以判断静态页面是否存在,如果不存在,才给应用服务器发出请求
7 楼
Readonly
2007-05-09
janh 写道
不认为这是无太大用处的功能,我就经常点中间的页数,如果第一次看这个帖子时只有4页,过了几天达到8页了,那我显然直接从第4页看起,一次一次点下一页岂不是麻烦,而且更浪费服务器资源,有时要看谁在第几页的发言当然也是直接点页数。
偶是指不要把那么页数显示在分论坛的帖子列表中,在进入单个帖子的页面当然还是需要的。
另外,偶的小脑袋哪能记住几天前看到第几页这种OOXX的事情,还要记住谁在第几页的发言简直是@#¥%...这种大肠帖都是点开最后一页,然后依靠回复时间来找到大致位置
6 楼
chenqj
2007-05-09
对象缓存是基本的
对于很多应用,查询缓存才是最关键的
尤其对web这种列表应用
对于很多应用,查询缓存才是最关键的
尤其对web这种列表应用
发表评论
-
WebObjects的来龙去脉
2012-06-08 15:30 7612在知乎上回答的一个问题:http://www.zhihu.co ... -
缓存技术浅谈
2010-09-24 18:08 21809有我在两年前写的一个培训的ppt,是介绍缓存知识的。有兴趣的可 ... -
对领域模型实现的总结性观点
2008-11-30 15:16 19559陶文发起的对领域模型 ... -
发现JBoss Seam很棒呀!有用Seam做过项目的吗?
2008-07-06 20:56 30325上周去见了一个朋友Mark,他应邀在Red Hat的研讨会上面 ... -
Spring Application Platform - SpringSource的应用服务器发布
2008-05-05 17:04 68932008年的5.1劳动节,Spring ... -
Warp framework - 一个相当有前途的Java轻量级Web开发框架
2008-03-06 15:24 22568Warp framework 是最近刚刚 ... -
Google Android会成为手机领域的微软Windows吗?
2007-11-16 17:23 9644Google gPhone手机的传言已经沸沸扬扬好几个月了,然 ... -
Java已经过时了吗?
2007-07-02 15:43 59722在四年以前,当我开始 ... -
Java开源框架发展的遐想
2007-05-23 00:04 34811上周末在杭州网侠大会做演讲的时候,我说:Java开源框架的革命 ... -
为什么ORM性能比iBATIS好?
2007-05-06 11:16 34523缓存是有很多层次的,有web server前端缓存,有动态页面 ... -
点评Grails vs RoR
2007-03-30 17:49 8285Grails的革新和RoR相比,非常不彻底,很多地方兼容Jav ... -
缓存简述
2007-03-30 09:55 12263缓存实现的层面有很多: 1、对象缓存 由ORM框架提供,透明 ... -
JRuby0.9.8,正式宣布支持ruby on rails
2007-03-07 10:35 15667http://jruby.codehaus.org/ 自从S ... -
domain model的延伸讨论
2007-03-03 01:17 40709domain model,又称为领域模型,是Java企业应用讨 ... -
可以开始用Struts2.0了
2007-02-27 14:56 56101http://struts.apache.org/ Apac ... -
Google Guice - 比Spring快100倍的IoC容器
2007-02-27 14:46 58237http://code.google.com/p/google ... -
Spring2.0和EJB3.0随谈
2007-02-08 14:26 18464Spring自从2003年发布以来 ... -
Java程序员的推荐阅读书籍
2007-02-07 20:12 101364《Java程序员的推荐阅读 ... -
应该如何正确使用Quartz
2006-12-27 11:40 34233对于Web容器来说,最忌讳应用程序私自启动线程,自行进行线程调 ... -
静态类型语言的优势究竟是什么?
2006-11-13 10:03 33497在参与这个讨论的过程中,产生了一个新的话题,很想和大家探讨一下 ...
相关推荐
同时,避免缓存未命中的情况,如缓存冲突(由于地址映射导致相同位置的多个数据无法同时在缓存中存储)和伪共享(多线程环境中,不同线程访问的共享变量位于同一缓存行,导致无效的缓存更新)。 总的来说,计算机...
.NET 4.0面向对象编程漫谈应用篇是一本专注于.NET 4.0框架下进行面向对象编程技术的电子书籍。作者金旭亮将其专业见解和实践经验融入到这本书中,让读者在应用层面上深入理解面向对象编程(Object-Oriented ...
总而言之,《.NET 4.0面向对象编程漫谈 应用篇》这本书会深入讲解这些核心概念,并结合.NET 4.0的特性和实践案例,帮助读者掌握面向对象编程在实际项目中的应用。通过学习,开发者不仅可以提升编程技巧,还能更好地...
### 对数漫谈及对数在计算机中的应用 #### 一、对数的起源与发展历程 对数作为一种数学运算,其重要性在于简化了复杂的乘除、乘方和开方等运算,大大提高了计算效率,从而促进了科学技术的发展。早在16世纪末期,...
【漫谈应用广泛的金属材料】 金属材料在人类生活中扮演着至关重要的角色,它们的历史可以追溯到石器时代。从最初的石器,人类逐渐过渡到使用金属材料,经历了铜器时代和铁器时代,直至现代,金属材料的应用已经渗透...
大厂高手骆俊武出品的《漫谈线上问题排查》电子书
华为防火墙技术漫谈》介绍华为传统防火墙关键技术原理、应用场景和配置方法,主要包括安全策略、攻击防范、NAT、双机热备、选路,并结合网上案例给出以上技术的综合应用配置举例,以防火墙网上实际需求为导向,采用...
《漫谈高数》系列文章深入探讨了高等数学的核心概念,尤其聚焦于级数理论及其在实际问题中的应用。在首篇文章《漫谈高数(一)泰勒级数的物理意义》中,作者巧妙地将复杂的数学原理与直观的物理意义相结合,使读者能够...
架构漫谈(三):如何做好架构之识别问题 架构漫谈(四):如何做好架构之架构切分 架构漫谈(五):什么是软件 架构漫谈(六):软件架构到底是要解决什么问题? 架构漫谈(七):不要空设架构师这个职位,给他实权...
漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...
谈兼容内核之一:ReactOS怎样实现系统调用.pdf 漫谈兼容内核之二:关于kernel -win32的对象管理.pdf 漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 漫谈兼容内核之四:Kernel-win32的进程管理.pdf 漫谈兼容内核...
华为防火墙技术漫谈,理论篇共包含十章,涵盖了会话与状态检测、安全策略、攻击防范、NAT、GRE 、L2TP 、IPSec 、SSL、双机热备、出口选路的原理、应用场景及配置方法
### AN-106_放大器应用漫谈 #### 概述 《AN-106_放大器应用漫谈》是一份由ADI(Analog Devices Inc.)提供的技术文档,主要介绍了各种放大器的应用场景及其相关的电路设计原理。这份文档涵盖了广泛的放大器应用...
01.漫谈兼容内核之一:Wine的系统结构.pdf 02.漫谈兼容内核之二:关于kernel-win32的对象管理.pdf 03.漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 04.漫谈兼容内核之四:Kernel-win32的进程管理.pdf 05.漫谈...
作者: (苏)AH吉洪诺夫 出版社: 湖南教育 出版时间: 1986 装帧: 平装 页数: 212页
《漫谈兼容内核》是毛德操先生对操作系统内核兼容性问题深入探讨的一部作品,主要聚焦在Windows系统中的兼容内核技术。在这个领域,我们常常会遇到各种软硬件兼容性挑战,如何使内核能够适应不同环境、支持各种设备...
导数描述了函数的变化率,积分则可以用来计算面积、体积以及物理问题中的瞬时速度和加速度。 2. 复变函数:讨论复数在微积分中的应用,如复积分、洛朗级数和解析函数,这在工程和物理领域有着广泛的应用。 3. 微分...
《Windows之漫谈兼容内核》是一份深入探讨Windows操作系统内核兼容性的资源,它旨在帮助用户和开发者更好地理解Windows系统的核心运作机制,特别是在处理不同版本间的兼容性问题上。本文将围绕Windows内核的基本概念...