Chinaunix

标题: 数据库cache失效的实现方式 [打印本页]

作者: ailure    时间: 2014-05-28 03:32
标题: 数据库cache失效的实现方式
现在想实现数据库的cache功能,因为公司产品用自己开发的非标准数据库,目前的cache功能非常简单, 只设置了定时失效的机制.
我大概看了下一般数据的cache的失效管理:
1, 缓存timeout后,重查数据库.
2, 后端数据库更新后(用户通过O&M接口更新), 数据库主动通知cache需要更新.
两者各有优点, 可能需要根据数据库是否更新频繁来决定采用哪种方法, 有没有一些成功的经验可以分享呢,在此多谢!




作者: yulihua49    时间: 2014-05-28 10:03
本帖最后由 yulihua49 于 2014-05-28 10:09 编辑
ailure 发表于 2014-05-28 03:32
现在想实现数据库的cache功能,因为公司产品用自己开发的非标准数据库,目前的cache功能非常简单, 只设置了定 ...

timeout后作废cache。
数据改变后作废cache。

通过事件作废cache有个好处,可以及时腾空空间。

频繁更新的数据不要依赖数据的cache,依赖执行计划的cache是更好的办法。就如ORACLE的软解析。
作者: ailure    时间: 2014-05-28 16:15
是指最好两种作废方式得同时支持吗?
一般频繁更新是指有多频繁呢, 有没有一些经验数据可以借鉴啊? 多谢!

作者: ailure    时间: 2014-05-28 16:16
是指最好两种作废方式得同时支持吗?
一般频繁更新是指有多频繁呢, 有没有一些经验数据可以借鉴啊? 多谢!

作者: timespace    时间: 2014-05-28 17:26
怎么不用memcached,后端连数据库?
既然数据库自己写的,可以考虑开发一种类似memcached的前端cache,什么timeout和通知更新都免了,而且还能避免直连数据库读写,这样的好处太多了,安全性/扩展性/。。。
作者: ailure    时间: 2014-06-03 17:28
回复 5# timespace


    对,如果从零开始,完全可以采用你的建议,做个类似memcache,再加上持久化功能,就很完美了.但现在的问题是, 数据库已经有了,当然这个是自己开发的,现在推倒从来,不太可能,
但性能不太好,尤其大并发的支持,所以才想到自己做个前端缓存, 但对于如何刷新这个前端缓存,不知道如何下手.
作者: yulihua49    时间: 2014-06-04 10:54
ailure 发表于 2014-05-28 16:16
是指最好两种作废方式得同时支持吗?
一般频繁更新是指有多频繁呢, 有没有一些经验数据可以借鉴啊? 多谢!

采用LRU自动淘汰,频度由LRU判定。
作者: ailure    时间: 2014-06-04 17:42
回复 7# yulihua49


    非常感谢你的建议, 确实还没想过采用LRU机制, 这个应该是cache最常用的淘汰机制!

作者: yulihua49    时间: 2014-06-05 09:57
ailure 发表于 2014-06-04 17:42
回复 7# yulihua49

想了一下,LRU判定不了频度。但可以在LRU里捎带手测试一下数据有无变化。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2