NoSQL架构实践——以NoSQL为缓存
来源:互联网 发布:sql server 安装 编辑:程序博客网 时间:2024/05/30 02:25
说起内存模式缓存,我们自然就会想起大名鼎鼎的Memcached。在互联网发展过程中,Memcached曾经解救了数据库的大部分压力,做出了巨大的贡献,直到今天,它依然是缓存服务器的首选。Memcached的常见使用方式类似下面的代码: Memcached提供了相当高的读写性能,一般情况下,都足够应付应用的性能要求。但是基于内存的Memcached缓存的总数据大小受限于内存的大小。 当前如日中天、讨论得异常火热的NoSQL数据库Redis又为我们提供了功能更加强大的内存存储功能。跟Memcached比,Redis的一个key的可以存储多种数据结构Strings、Hashes、Lists、Sets、Sorted sets。Redis不但功能强大,而且它的性能完全超越大名鼎鼎的Memcached。Redis支持List、hashes等多种数据结构的功能,提供了更加易于使用的api和操作性能,比如对缓存的list数据的修改。 同样,其他一些NoSQL数据库也提供了内存存储的功能,所以也适合用来做内存缓存。比如Tokyo Tyrant就提供了内存hash数据库、内存tree数据库功能,内存tree数据可根据key的顺序进行遍历。你可以通过使用其提供的兼容Memcached协议或自定义的协议来使用。 虽然基于内存的缓存服务器具有高性能,低延迟的特点,但是内存成本高、内存数据易失却不容忽视。几十GB内存的服务器,在很多公司看来,还比较奢侈。所以,我们应该根据应用的特点,尽量的提高内存的利用率,降低成本。 大部分互联网应用的特点都是数据访问有热点,也就是说,只有一部分数据是被频繁访问的。如果全部都cache到内存中,无疑是对内存的浪费。 这时,我们可以利用NoSQL来做数据的缓存。其实NoSQL数据库内部也是通过内存缓存来提高性能的,通过一些比较好的算法,把热点数据进行内存cache,非热点数据存储到磁盘以节省内存占用。由于其数据库结构的简单,从磁盘获取一次数 据也比从数据库一次耗时的查询划算很多。用NoSQL数据库做缓存服务器不但具有不错的性能。而且还能够Cache比内存大的数据。 使用NoSQL来做缓存,由于其不受内存大小的限制,我们可以把一些不常访问、不怎么更新的数据也缓存起来。比如论坛、新闻的老数据、数据列表的靠后的页面,虽然用户访问不多,但是搜索引擎爬虫会访问,也可能导致系统负载上升。 如果NoSQL持久化缓存也使用类似基于内存的memcached设置过期时间的方式,那么持久化缓存就失去了意义。所以用NoSQL做缓存的过期策略最好不使用时间过期,而是数据是否被更新过,如果数据没有更新,那么就永久不过期。下面我们用代码(php)演示一种实现这种策略的方法: 场景:新闻站点的评论系统。用户对新闻页面的url进行评论,然后根据url进行查询展示。 我把上面代码演示的缓存使用方式称为基于版本的缓存。这种方式同样适用于基于内存的Memcached。它能实现缓存数据的实时性,让用户感觉不到延迟。只要用户一发表评论,该新闻的评论缓存就会失效。用户很少去评论一些过时的新闻,那么缓存就一直存在于NoSQL中,避免了爬虫访问过时新闻的评论数据而冲击数据库。 目前国内的新浪微博已经在大量的使用Redis缓存数据,赶集网也在大量的使用Redis。Redis作为一些List,Hashes等数据结构的缓存,非常适合。 把NoSQL当持久化Cache使用的模式,在很多大数据量、有热点、查询非热点数据比较消耗资源的场景下比较有用。 到这里,关于NoSQL架构实践的三篇文章就结束了。NoSQL架构并不局限于我介绍的三种模式,他们之间也可以进行组合,应该根据你具体的应用场景灵活使用。不管是什么模式,都是为了解决我们的问题而出现的,所以在系统架构的时候,要问下自己,我为什么要用NoSQL;在对NoSQL架构模式选型的时候,要问下自己,我为什么要这么用NoSQL。 参考链接:内存模式
持久化模式
总结
NoSQL架构实践总结
- NoSQL架构实践——以NoSQL为缓存
- NoSQL架构实践(三)——以NoSQL为缓存
- NoSQL架构实践(三)——以NoSQL为缓存
- NoSQL架构实践(三)——以NoSQL为缓存
- NoSQL架构实践(三)——以NoSQL为缓存
- NoSQL架构实践(三)——以NoSQL为缓存
- NoSQL架构实践(一)——以NoSQL为辅
- NoSQL架构实践(一)——以NoSQL为辅
- NoSQL架构实践(一)——以NoSQL为辅
- NoSQL架构实践(一)——以NoSQL为辅
- NoSQL架构实践(二)——以NoSQL为主
- NoSQL架构实践(一)——以NoSQL为辅
- NoSQL架构实践(一)——以NoSQL为辅
- NoSQL架构实践(二)——以NoSQL为主
- NoSQL架构实践(一)——以NoSQL为辅
- NoSQL架构实践(一)——以NoSQL为辅
- NoSQL架构实践(一)——以NoSQL为辅
- NoSQL架构实践(二)——以NoSQL为主
- 一段软件更新程序(使用WinRar压缩包) - C#探索者 - 博客园
- Facebook的feed格式设计
- DelphiX 组件
- maven使用 jetty的Debug
- State属性的用法(写于开发登录界面时)
- NoSQL架构实践——以NoSQL为缓存
- js实现div滑动收起效果
- Linux 下串口编程入门
- CentOS5.5下scribe写入数据到HDFS配置方法
- C++中虚函数的实现(转)
- 合并排序与分治法
- 淘宝考试题目与答案
- AES对称加密算法原理 - guo2777的专栏 - CSDN博客
- 把图象文件转换成XML格式文件(二进制转字符)