论坛首页 Java企业应用论坛

关于缓存的想法

浏览 11017 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-07  
现在基本对数据库的操作出现性能问题的时候,第一个想到的是缓存,现在谈得比较多的memcache缓存,其实他就是大的hash表,可以作为一个全局的cache,而且他没有像数据库中的一些功能,我想既然是这样,我们可以用嵌入式的内存数据库,比如hsql,作为cache来用,这样数据也是放在内存在,我们在做select的时候,仍然操作的是内存,这样我们也可以把这种“嵌入式的内存数据库”来作为全局的缓存,和memcache也是一样的,不用磁盘用内存,而且也获得了数据库的一些功能,这样做或许比memcache还更好,大家讨论一下,像这样做有什么缺点?
   发表时间:2007-10-07  
我现在想到第一个问题,就是像用hsql来作为cache的话,在数据很大的时候,到GB级别的时候,会不会不稳定
0 请登录后投票
   发表时间:2007-10-07  
“不好的缓存策略其实只是内存泄露的另一个代名词”。
“缓存只和策略有关”,和具体体现方式关系不大。
-- the old new thing.
0 请登录后投票
   发表时间:2007-10-07  
问题大大的。。。

你一个记录一个记录的操作或许不会有问题,可是当你批量操作的时候,你怎么保证所需要的数据都在缓存中?难道每次操作还要去同步所有需要操作的数据?

sql支持的操作强项就是批量,而对单个记录操作就是杀鸡用牛刀了(性能也远远不如hash表有效),所以sql型的数据库并不很适合用作缓存(除非你有很特殊的应用)。

想用数据库作为缓存的话,推荐用oodb一类的,他们擅长于对单个对象的存取,适合作磁盘缓存。他们在内存中的结构也是类似于一个hash表。
0 请登录后投票
   发表时间:2007-10-07  
memcache 更适合在业务层或更高的层次来做,
考虑到可以把cache平行分布到多个memcached节点上,扩展能力是非常惊人的,特别适合海量数据高并发读取时采用。
0 请登录后投票
   发表时间:2007-10-07  
海量数据就很难了
0 请登录后投票
   发表时间:2007-10-08  
haihai 写道
我现在想到第一个问题,就是像用hsql来作为cache的话,在数据很大的时候,到GB级别的时候,会不会不稳定

据robbin说,hsql是单线程的,无法处理并发访问的情况。他建议考虑MySQL的内存表
0 请登录后投票
   发表时间:2007-10-08  
引用
movingboy   

haihai 写道
我现在想到第一个问题,就是像用hsql来作为cache的话,在数据很大的时候,到GB级别的时候,会不会不稳定

据robbin说,hsql是单线程的,无法处理并发访问的情况。他建议考虑MySQL的内存表

我还不清除hsql是单线程的,不一定就是hsql,也可以用derby,berkelyDB,当然那两个也没有怎么看过,用myql的内存表,数据会持久化到硬盘吗,不知道mysql还有个内存表的功能。
0 请登录后投票
   发表时间:2007-10-08  
引用
timerri

问题大大的。。。

你一个记录一个记录的操作或许不会有问题,可是当你批量操作的时候,你怎么保证所需要的数据都在缓存中?难道每次操作还要去同步所有需要操作的数据?

这个问题用memcache也存在啊,要想百分之百命中缓存,就只有把所有数据都缓存了,不过你说的用oodb,到是不错,我也想过
0 请登录后投票
   发表时间:2007-10-08  
开篇第一句话就是菜鸟级的:现在基本对数据库的操作出现性能问题的时候,第一个想到的是缓存。

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

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

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics