在《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
分享到:
相关推荐
作者开涛,作为业界资深专家,以其丰富的实战经验,为我们揭示了支撑大规模网站背后的架构原理和技术实践。 首先,书中涉及的核心概念是“高可用”与“高并发”。高可用意味着系统在长时间内能够持续稳定地提供服务...
"从MySQL到MongoDB——视觉中国的NoSQL之路" MySQL中的挑战 在传统的基于静态内容的产品中,MySQL使用Master+Master的部署方案,前端使用自己的PHP框架进行开发,Memcached作为缓存,Nginx进行Web服务器和负载...
本文将从网站架构、网络传输、数据库优化、缓存、页面静态化、分布式数据库、NoSQL 和 Hadoop、高并发解决方案、应用和静态资源分离、CDN 底层优化等方面对 Spring MVC 源代码进行分析和实践。 1. 网站架构及其演变...
这本书通过详细讲解理论与实践相结合的方式,为读者揭示了分布式网站架构的设计理念和实施策略。 首先,书中涵盖了分布式系统的基石——负载均衡。负载均衡是将工作负载分布到多个计算资源上,以提高服务响应速度和...
9.6 缓存使用模式实践 172 9.6.1 Cache-Aside 173 9.6.2 Cache-As-SoR 174 9.6.3 Read-Through 174 9.6.4 Write-Through 176 9.6.5 Write-Behind 177 9.6.6 Copy Pattern 181 9.7 性能测试 181 9.8 参考资料 182 10 ...
于是,一种新的数据存储模型——NoSQL(Not Only SQL)应运而生。NoSQL并非拒绝SQL,而是强调非关系型、分布式、水平扩展和高性能等特性,以适应现代互联网应用的需求。 **1. NoSQL的四大类型** NoSQL主要分为四大...
于是,一种新的数据库类型——NoSQL(Not Only SQL)应运而生。NoSQL数据库的设计理念在于提供灵活的数据模型、高可扩展性和高性能,尤其适用于互联网应用和大数据环境。 **NoSQL的四大类型** 1. **键值存储(Key-...
在应用篇中,分享了eBay、淘宝、Flickr和Twitter等大型网站的架构经验,涉及运维、代码协同、缓存管理和云计算架构等实践,强调了可扩展性、数据模型和持久化设计的重要性。 最后,文中提到NoSQL数据库背后的共通...
【Nosql.ppt——Web2.0时代的非关系型数据库革命】 随着互联网的快速发展,特别是Web2.0的兴起,传统的关系型数据库逐渐暴露出其在处理大规模、高并发、高扩展性场景中的局限性。这催生了NoSQL(Not Only SQL)运动...
标题“10NoSQL非关系型数据库”暗示了我们将探讨10个重要的NoSQL数据库相关主题,而描述没有提供具体信息,所以我们只能根据提供的压缩文件名来深入讲解其中涉及的NoSQL数据库——Redis和MongoDB。 1. **Redis**: ...
以某电信运营商的计费结算系统为例,当前采用的是小型机+Oracle的架构,随着业务的增长,这种架构面临着诸多挑战,如数据库和存储系统的I/O压力增大、分库带来的扩容难度等问题。为了解决这些问题,可以考虑引入...
他还可能涵盖了NoSQL数据库的设计理念、核心技术、最佳实践,以及在实际项目中的应用案例,帮助读者深入理解并掌握NoSQL数据库在大数据时代的应用。 总的来说,《大数据挑战与NoSQL数据库技术》这本书是理解大数据...
"Professional NoSQL"不仅仅是一本书的标题,它代表了数据库技术的一个重要分支——非关系型数据库。通过了解NoSQL数据库的定义、分类、特点及应用场景,我们能更好地理解其在现代信息技术中的作用和价值。随着数据...
在现代软件架构和大数据处理中,NoSQL 数据库因其独特的特性而变得尤为重要。NoSQL(Not Only SQL)数据库是指一类非关系型的数据管理系统,它们在数据存储方式上与传统的SQL数据库有着显著的不同。本篇将详细介绍...
### 金融应用架构——高可用低延时的PayPal风控数据平台 #### 一、引言 随着数字化支付行业的快速发展,金融技术(FinTech)在风险管理领域的应用变得日益重要。对于像PayPal这样的全球领先数字支付公司而言,构建...
基于 Spring Boot 搭建应用开发框架 —— 基础架构 本文主要讲解了基于 Spring Boot 搭建应用开发框架的基础架构,包括项目结构、Spring Boot 配置、MyBatis 集成、日志及全局异常处理、Redis 缓存、Swagger 支持 ...
《大型分布式网站架构设计与实践》是一本专为IT专业人士,特别是架构师量身打造的书籍,它深入探讨了在构建大规模、高可用性、高性能的互联网应用时所需的关键技术和策略。这本书涵盖了从基础概念到高级实践的广泛...
其中,应用层可以根据不同业务场景实现不同的功能,如快速发布商品、开展营销活动等,而其他三层则为这些业务提供支持。 总结来说,大数据处理架构在高并发环境下的探索与实践是一个多方面、多层次的综合性问题。它...
从分布式MySQL集群到NoSQL存储与计算,再到统一的数据中间层和通用数据报表框架,每一环节都体现了淘宝在大数据领域深厚的技术积累和实践经验。这对于其他互联网公司来说,无疑具有重要的参考价值和借鉴意义。
### 2021Java字节跳动面试题——面向字节_MongoDB.pdf #### 知识点一:NoSQL数据库与RDBMS的区别及其应用场景 - **NoSQL数据库含义**:NoSQL(Not Only SQL)指的是非关系型数据库,这类数据库与传统的关系型...