`
haihai
  • 浏览: 71928 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于缓存的想法

阅读更多
现在基本对数据库的操作出现性能问题的时候,第一个想到的是缓存,现在谈得比较多的memcache缓存,其实他就是大的hash表,可以作为一个全局的cache,而且他没有像数据库中的一些功能,我想既然是这样,我们可以用嵌入式的内存数据库,比如hsql,作为cache来用,这样数据也是放在内存在,我们在做select的时候,仍然操作的是内存,这样我们也可以把这种“嵌入式的内存数据库”来作为全局的缓存,和memcache也是一样的,不用磁盘用内存,而且也获得了数据库的一些功能,这样做或许比memcache还更好,大家讨论一下,像这样做有什么缺点?
分享到:
评论
28 楼 kyo100900 2007-10-10  
memcache, JBoss Cache, OSCache等,这些缓存框架会不会在用户访问一个List<User>后将它缓存起来, 这个时候呢数据库后台又更新了这个List的某些记录。请问缓存会在用户再次访问这条记录的时候自动识别,并自动更新成最新的数据信息再缓存起来吗?
27 楼 coolzyt 2007-10-10  
我实现了一个cache,采用LRU算法,一段时间内访问数低于某个数字就会清除(可以设置),底层用concurrentHashMap实现,无聊之作。
26 楼 hlxiong 2007-10-10  
我们用缓存的地方不多,一般只对数据字典和经常被使用的全局数据做缓存。至于页面缓存,兄弟真是孤陋寡闻,貌似听过,但从未见过。学习中。。。
25 楼 lcllcl987 2007-10-09  
--hsql是单线程的,无法处理并发访问的情况。他建议考虑MySQL的内存表
鄙人很赞同, MySql的内存表即使在单用户访问的情况下也优于hqsldb的内存模式,如果采用数据库做缓存, hsqldb不在考虑之列.
24 楼 imjl 2007-10-09  
引用

这三者是没有本质区别的

缓存的意义在于:让被期待性高的数据暂存入性能相对好的存储设备以达到使系统性能提升的目的。

任何缓存,无论页面、数据、对象等都是按照上面描述来进行策略选择的。
也就是说,不管需要缓存的是什么,你只用选出被期待性高的,然后把他们存入性能相对较好的存储设备就行了。

被期待性的衡量标准在各个应用中可能都不尽相同,也没有一种缓存策略能放之四海皆准的,脱离了应用环境去谈缓存策略是毫无意义的,更不能以所谓 页面,数据,和对象去分类。

如果真要分类,至少也该以概率模型来分类,通过统计(或者猜测)应用中的被使用概率模型来决定使用何种策略。

就谈你们认为简单的页面缓存。我举2个例子:
1.一个网站有3个页面A,B,c,统计得页面访问量为:A 79%,B 10%, C 11%
2.一个网站有3个页面A,B,C,统计得页面A在上午被访问的概率为95%,而B,C在下午被访问的概率为90%

这都是页面的缓存应用,但他们的缓存策略是不同的。同理,对于对象和数据缓存,也要看不同情况下的不同应用。



另:前面说lz使用sql型内存数据库不建议使用,主要问题在于sql型内存数据库在结构上并不能很好支持缓存的实现,而且在性能上也不如hash型速度快。并不适合作为“性能相对较好的存储设备”使用



从原理来说,你说的对的。

从其名称来看,是从应用角度来划分的。所以我也是从应用角度去阐述其差异。

概率类型来分类?从举例来看还是应用层面的分析啊。至于缓存策略,我认为是个复杂的东西,需要慢慢品味。

我目前知道的cache是按照其存储介质(我自己总结的,说错了别骂我 )来划分的,就是file cache, memory cache.

sql型内存数据库偶不认识,才疏学浅的很。
23 楼 timerri 2007-10-09  
imjl 写道
我觉得这三者有差别,而且差异很大。

举个例子,一个页面,有很多类信息数据组成,那么按照业务需求和设计目标,按照重要性和实时性有先后次序。比如A,B,C为最重要的,响应时间为10ms,D,E,F为次级,响应时间为10-50ms,最低级的可能只需要200ms内完成即可。


这三者是没有本质区别的

缓存的意义在于:让被期待性高的数据暂存入性能相对好的存储设备以达到使系统性能提升的目的。

任何缓存,无论页面、数据、对象等都是按照上面描述来进行策略选择的。
也就是说,不管需要缓存的是什么,你只用选出被期待性高的,然后把他们存入性能相对较好的存储设备就行了。

被期待性的衡量标准在各个应用中可能都不尽相同,也没有一种缓存策略能放之四海皆准的,脱离了应用环境去谈缓存策略是毫无意义的,更不能以所谓 页面,数据,和对象去分类。

如果真要分类,至少也该以概率模型来分类,通过统计(或者猜测)应用中的被使用概率模型来决定使用何种策略。

就谈你们认为简单的页面缓存。我举2个例子:
1.一个网站有3个页面A,B,c,统计得页面访问量为:A 79%,B 10%, C 11%
2.一个网站有3个页面A,B,C,统计得页面A在上午被访问的概率为95%,而B,C在下午被访问的概率为90%

这都是页面的缓存应用,但他们的缓存策略是不同的。同理,对于对象和数据缓存,也要看不同情况下的不同应用。



另:前面说lz使用sql型内存数据库不建议使用,主要问题在于sql型内存数据库在结构上并不能很好支持缓存的实现,而且在性能上也不如hash型速度快。并不适合作为“性能相对较好的存储设备”使用
22 楼 leeking 2007-10-08  
乱了乱了.
21 楼 ntcofe 2007-10-08  
看你的缓存怎么管理了,反正内存的使用是由OS调度的,你占太多内存它一样把你数据塞到硬盘去,不见得提高效率。
20 楼 imjl 2007-10-08  
timerri 写道
惊鸿逝水 写道
timerri 写道
缓存是对付高并发重复访问的最有力武器,这也是web项目经常会遇到问题,对于这个,就用不着问DBA了


你的意思是页面缓存?这个应该没什么好讨论的,页面缓存和静态页面没有太多区别。

应该针对数据缓存或对象缓存才有意思。


页面缓存和数据缓存和对象缓存有本质上的区别么????

用什么技术不是有没有“意思”决定的,而是有没有“效”决定的!!



我觉得这三者有差别,而且差异很大。

举个例子,一个页面,有很多类信息数据组成,那么按照业务需求和设计目标,按照重要性和实时性有先后次序。比如A,B,C为最重要的,响应时间为10ms,D,E,F为次级,响应时间为10-50ms,最低级的可能只需要200ms内完成即可。


当然有些应用没有这样划分,只是快速展示整个页面,那么页面缓存用的多了。

而有些应用本身采用ajax,那么只需要用数据缓存下。


当然用什么技术,我同意你观点,有效。

19 楼 imjl 2007-10-08  
引用

现在基本对数据库的操作出现性能问题的时候,1:第一个想到的是缓存,现在谈得比较多的memcache缓存,其实他就是大的hash表,可以作为一个全局的cache,而且2:他没有像数据库中的一些功能,我想既然是这样,我们可以用嵌入式的内存数据库,比如hsql,作为cache来用,这样数据也是放在内存在,我们在做select的时候,仍然操作的是内存,这样我们也可以把这种“嵌入式的内存数据库”来作为全局的缓存,和memcache也是一样的,不用磁盘用内存,而且也获得了数据库的一些功能,3:这样做或许比memcache还更好,大家讨论一下,像这样做有什么缺点?

1:ray_linn说了。
2:数据库的一些功能?是什么?
3:或许,为什么不测试下呢?
18 楼 swantt 2007-10-08  
呵呵,学习中.
17 楼 timerri 2007-10-08  
鸡同鸭讲~~~各说各话~~~

没啥好说的,再说就是抬杠了...

16 楼 惊鸿逝水 2007-10-08  
timerri 写道
惊鸿逝水 写道
timerri 写道
缓存是对付高并发重复访问的最有力武器,这也是web项目经常会遇到问题,对于这个,就用不着问DBA了


你的意思是页面缓存?这个应该没什么好讨论的,页面缓存和静态页面没有太多区别。

应该针对数据缓存或对象缓存才有意思。


页面缓存和数据缓存和对象缓存有本质上的区别么????

用什么技术不是有没有“意思”决定的,而是有没有“效”决定的!!


你很激动吗?哈哈

你要表达的意思和我的有什么区别?缓存是经常会用到,我上面说了,关键是缓存命中率。不是什么问题都要用Cache,而是什么数据应该用Cache的问题。页面缓存的使用场景和对象缓存的使用场景会相同吗 ?!
15 楼 timerri 2007-10-08  
惊鸿逝水 写道
timerri 写道
缓存是对付高并发重复访问的最有力武器,这也是web项目经常会遇到问题,对于这个,就用不着问DBA了


你的意思是页面缓存?这个应该没什么好讨论的,页面缓存和静态页面没有太多区别。

应该针对数据缓存或对象缓存才有意思。


页面缓存和数据缓存和对象缓存有本质上的区别么????

用什么技术不是有没有“意思”决定的,而是有没有“效”决定的!!
14 楼 惊鸿逝水 2007-10-08  
timerri 写道
缓存是对付高并发重复访问的最有力武器,这也是web项目经常会遇到问题,对于这个,就用不着问DBA了


你的意思是页面缓存?这个应该没什么好讨论的,页面缓存和静态页面没有太多区别。

应该针对数据缓存或对象缓存才有意思。
13 楼 timerri 2007-10-08  
缓存是对付高并发重复访问的最有力武器,这也是web项目经常会遇到问题,对于这个,就用不着问DBA了
12 楼 ray_linn 2007-10-08  
haihai 写道
引用
ray_linn   

开篇第一句话就是菜鸟级的:现在基本对数据库的操作出现性能问题的时候,第一个想到的是缓存。

你去问问你们公司的DBA会同意你这句话么?

并不是每个公司都有dba的,可能我的表述有问题,我只要想说的是缓存的问题,并不涉及sql优化的问题,当然我知道sql优化在性能调整中是一个很重要的部分


简单的说:

缓存(在某些情况下)可以提高性能。

但是出现数据库性能问题的时候,不会把缓存当成第一方案,而是应该对数据库的记录进行分析,具体问题具体解决。

以缓存来解决就是治标不治本。

我认为与其讨论用什么东西当缓存,还不如好好讨论一下什么时候适用缓存和如何提高缓存的hit rate。

11 楼 惊鸿逝水 2007-10-08  
缓存有没有效果关键是看命中率。如果命中率不高,用缓存是没有效果,徒耗内存。
10 楼 haihai 2007-10-08  
引用
ray_linn   

开篇第一句话就是菜鸟级的:现在基本对数据库的操作出现性能问题的时候,第一个想到的是缓存。

你去问问你们公司的DBA会同意你这句话么?

并不是每个公司都有dba的,可能我的表述有问题,我只要想说的是缓存的问题,并不涉及sql优化的问题,当然我知道sql优化在性能调整中是一个很重要的部分
9 楼 ray_linn 2007-10-08  
开篇第一句话就是菜鸟级的:现在基本对数据库的操作出现性能问题的时候,第一个想到的是缓存。

你去问问你们公司的DBA会同意你这句话么?

缓存不是用来解决数据库性能问题的方案!

相关推荐

Global site tag (gtag.js) - Google Analytics