发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 SOA
1 2 3 下一页 Go 3

关于jive的缓冲一些问题请教

2009-02-23 12:48
赞助商链接

前两天看了bangq老师的Jive论坛系统的分析,关于里边的缓冲,有一些不明:

在网上看到帖子,说缓存在不同层面上的,可以分为:
1、对象缓存
2、查询缓存
3、片断缓存
4、Action缓存

我看了Jive的分析,似乎是使用的是对象缓冲。

以Jive为例,论坛显示帖子,总是列出最新回复的主题,假如当有10个用户查看论坛时,Jive是执行10次查询语句,列出最新的10个主题的id,然后再根据主题id从缓冲cache中获取主题对象吗?还是Jive中使用的是查询缓冲?

如果真是执行10次查询,为什么在查询多个最新主题id的时候,干脆一起将主题的其他字段查询出来呢?查询1个字段和一起查询其他字段的对数据库的消耗很大吗?

我看到有人说查询缓冲使用sql语句作为HashTable的key,不知各位大侠在现实中是不是这样实现呢?还是有别的实现方式?
[该贴被slandi于2009-02-23 12:49修改过]
[该贴被slandi于2009-02-23 12:50修改过]

2009-02-23 13:16

刚刚在某一帖子中看到banq如下描述:
缓存是针对业务对象的缓存,不是数据,注意这两个概念完全不一样,如果是数据缓存,则和数据库缓存没有两样,而业务对象则来自具体业务分析,重用性高,击中率高,可大大提高性能.

不知banq老师讲的业务对象缓冲?这里的业务对象与ORM的实体对象有区别吗?

我将数据库中表映射成实体存放到缓冲中,可是使用的时候,经常是需要关联的多个对象一起使用?这些关联的对象就是banq说的业务对象嘛?如果是这样的话,这些对象又是以什么标准构成对象的呢?

2009-02-23 19:52

说道缓冲其实核心还是离不开数据,状态、对象====其实还是通过某种数据形式进行描述的。

对于面向“业务”和“数据”的缓冲其实是在缓冲规则考量上的区别。面向数据的缓冲无外乎:fifo/lifo====,初看起来是一个良好的方式。但是在一个具体的业务过程中这样方式其实是很低效的,关键的因素是这样的方式没有与特定的业务过程结合。

落实到论坛系统我们可以考量一下用户信息部分的缓冲。
面向数据的方式:将所有查询过的信息以ORM的方式在一个池中进行缓冲,如LZ前面所述。
面向业务的方式:在每一个登陆用户的session中存放相关检索过的数据。
显然使用第二种方式下首先系统中不会缓冲垃圾数据;其次除非系统资源不足否则不会有重复的读取操作;第三施加适当的保存策略则可以大量的减少数据持久化的写入开销(因为直接在缓冲里更新了)。
如果使用面向数据的方式获得同等的效果则需在各个方面增加相当大的开销,而且很多时候都是无法实现的。

2009-02-23 21:36

首先感谢楼上的答复。真是不好意思,在1楼的时候把banq老师的名字打错了

to IceQi:
恕小弟愚昧,对您讲的意思没有太明白。呵呵,由于别人的优秀源码看的不太多,对缓冲这块也是刚刚接触,我想从底层了解缓存是如何实现的,不是简单的使用别人的框架。虽然感觉到面向数据方式的缓存的不足,可是我还是没有想到更好的解决方式。

“在每一个登陆用户的session中存放相关检索过的数据。”,不知你的意思是否是讲,为每个用户创建一套缓存?那如果这样的话,里边不是会有很多重复的数据吗?而且如果用户访问量很大的时候,那就如您所说不是会造成系统资源不足吗?

还是我的理解有误?

具体点讲,比如显示帖子列表这一页,如果使用面向业务的方式,具体是如何显示的呢?

2009-02-24 23:26

在IceQi的session里面保存IceQi的:运行时刻ID,登陆时间,姓名,email地址=====
但是比不包括他正在回复的这个帖子的详细信息。

同样在这个帖子里面保存:标题,首贴内容,后面查看过的内容======
但是不包括正在回复这个帖子的IceQi的详细个人信息。

老实讲这个概念是比较抽象的,最好还是可以参考一些别人的实现。

3Go 1 2 3 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com