`

NoSQL架构实践(三)——以NoSQL为缓存

 
阅读更多
在《NoSQL架构实践》系列的前面两篇文章中,介绍了《以NoSQL为主》《以NoSQL为辅》的架构。由于NoSQL数据库天生具有高性能、易扩展的特点,所以我们常常结合关系数据库,存储一些高性能的、海量的数据。从另外一个角度看,根据NoSQL的高性能特点,它同样适合用于缓存数据。用NoSQL缓存数据可以分为内存模式和磁盘持久化模式。

内存模式
说起内存模式缓存,我们自然就会想起大名鼎鼎的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。

参考链接:

关于Redis的一些介绍: http://blog.nosqlfan.com/tags/redis
分布式缓存还是NoSQL(英文): http://goo.gl/VLECa
NoSQL微群: http://q.t.sina.com.cn/127870
我的微博: http://t.sina.com.cn/sunli1223
分享到:
评论

相关推荐

    NoSQL介绍PPT

    为什么使用NoSQL? 为什么使用NoSQL? NoSQL的分类 NoSQL有什么特点? NoSQL有什么特点? NoSQL是否完美? NoSQL的一些概念——CAP NoSQL的一些概念——ACID NoSQL的一些概念——BASE NoSQL的一些概念——BASE NoSQL...

    NoSQL架构实践.doc

    NoSQL架构实践

    NoSQL开篇——为什么要使用NoSQL

    随着web2.0的快速发展,非关系型、分布式数据存储得到了快速的发展,它们不保证关系数据的ACID特性。NoSQL概念在2009年被提了出来。NoSQL最常见的解释是“non-relational”,“Not Only SQL”也被很多人接受。

    redis nosql/缓存服务器

    redis nosql/缓存服务器, 如何进行 redis 服务的搭建, 集群版,单机版,如何与 java 客服端进行链接, jedis 使用详情

    Making Sense of NoSQL 【解读NoSQL 英文版】

    第二部分介绍NoSQL最核心的架构模式——键值存储、图存储、列族存储、文档存储;第三部分展现一些常用的NoSQL解决方案,如HA、全文搜索等;第四部分讨论NoSQL的一些高级主题,如函数式编程。 全书理论与实践并重,...

    NoSQL架构实践

    怎么样把NoSQL引入到我们的系统架构设计中...不改变原有的以MySQL作为存储的架构,使用NoSQL作为辅助镜像存储,用NoSQL的优势辅助提升性能。//写入数据的示例伪代码//data为我们要存储的数据对象 data.title=”title”;

    NoSQL实践1

    大数据时代 关系数据库的瓶颈 NoSQL的优势 CAP理论 NoSQL数据模型及分类 NoSQL应用现状

    NoSQL数据库技术数据库资源调度平台架构实践.pdf

    NoSQL数据库技术数据库资源调度平台架构实践

    NoSQL数据库技术数据库资源调度平台架构实践.zip

    NoSQL数据库技术数据库资源调度平台架构实践.zip

    03-nosql-架构

    03-nosql-架构

    Google 的NoSql架构方案及其白皮书

    NULL 博文链接:https://tiant-netstars.iteye.com/blog/904378

    NoSQL数据库学习教程.pdf

    NoSQL数据库学习教程.pdf

    nosql_分布式存储及应用系统架构分析

    nosql_分布式存储及应用系统架构分析

    nosql课程

    由浅入深讲解NOSQL数据库,从NOSQL发展的背景,NOSQL理论,以及NOSQL具体数据库的开发、管理与优化,以及分布式集群架构实践等。侧重数据库的运维管理。 3.主要面向初中级开发人员,运维与DBA等1.NoSql视频教程-2018...

    数据库技术沙龙ppt:NoSQL应用实践

    主要介绍了NoSQL数据库技术的应用实践,包括NoSQL发展历程,NoSQL产品以及使用经验总结等。

    NoSQL数据库技术实战

    涵盖的内容有:NoSQL与大数据简介、NoSQL的数据一致性、NoSQL的水平扩展与其他基础知识、BigTable与Google云计算原理、Google云计算的开源版本——Hadoop、Dynamo:Amazon的高可用键值对存储、LevelDb——出自Google...

Global site tag (gtag.js) - Google Analytics