一切福田,不離方寸,從心而覓,感無不通。

Category Archives: MongoDB

springboot整合mongodb,并配置账户名和密码登录验证

springboot pom.xml加入依赖

application.yml加入连接信息 mapper编写

Application启动添加注解

application.yml配置,这里之前碰到一个坑,mongodb的配置没有写host和port属性,只写了database和uri,这种方式在无密码验证的情况下,可以连接mongodb。但是在mongodb设置了密码登录后,就无法连接,一直提示 Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on wxsb_dev to execute command { insert 这里我们说下,application.yml关于mongodb的两种配置 第一种,yml方式,注意这里的host port username password database,每个属性都要配置。

  第二种,uri方式

  之前就是配了如下的参数,导致一直出错,还以为是mongodb的用户权限配置出错导致,原来是配置文件出错,报错信息 Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on wxsb_dev to execute command { insert

  from:https://www.it610.com/article/1283088113266081792.htm

龙生   18 Oct 2021
View Details

一篇文章,掌握所有开源数据库的现状

数据库作为业务的核心,在整个基础软件栈中是非常重要的一环。近几年社区也是新的方案和思想层出不穷,接下来我将总结一下近几年一些主流的开源数据库方案,其背后的设计思想以及适用场景。本人才疏学浅如有遗漏或者错误请见谅。本次分享聚焦于数据库既结构化数据存储 OLTP 及 NoSQL 领域,不会涉及 OLAP、对象存储、分布式文件系统。 1 开源RDBMS与互联网的崛起 很长时间以来,关系型数据库一直是大公司的专利,市场被 Oracle / DB2 等企业数据库牢牢把持。但是随着互联网的崛起、开源社区的发展,上世纪九十年代 MySQL 1.0 的发布,标志着关系型数据库的领域社区终于有可选择的方案。 MySQL 第一个介绍的单机RDBMS就是MySQL。相信大多数朋友都已经对 MySQL 非常熟悉,基本上 MySQL 的成长史就是互联网的成长史。我接触的第一个 MySQL 版本是 MySQL 4.0,到后来的 MySQL 5.5 更是经典——基本所有的互联网公司都在使用。 MySQL 也普及了「可插拔」引擎这一概念,针对不同的业务场景选用不同的存储引擎是 MySQL tuning 的一个重要的方式。比如对于有事务需求的场景使用 InnoDB;对于并发读取的场景 MyISAM 可能比较合适;但是现在我推荐绝大多数情况还是使用 InnoDB,毕竟 5.6 后已经成为了官方的默认引擎。大多数朋友都基本知道什么场景适用 MySQL(几乎所有需要持久化结构化数据的场景),我就不赘述了。 另外值得一提的是 MySQL 5.6中引入了多线程复制和 GTID,使得故障恢复和主从的运维变得比较方便。另外,5.7(目前处于 GA 版本) 是 MySQL 的一个重大更新,主要是读写性能和复制性能上有了长足的进步(在5.6版本中实现了SCHEMA级别的并行复制,不过意义不大,倒是MariaDB的多线程并行复制大放异彩,有不少人因为这个特性选择MariaDB。MySQL 5.7 MTS支持两种模式,一种是和5.6一样,另一种则是基于binlog group commit实现的多线程复制,也就是MASTER上同时提交的binlog在SLAVE端也可以同时被apply,实现并行复制)。 如果有单机数据库技术选型的朋友,基本上只需要考虑 5.7 或者 MariaDB 就好了,而且 5.6、5.7 由 Oracle 接手后,性能和稳定性上都有了明显的提升。 PostgreSQL PostgreSQL的历史也非常悠久,其前身是UCB的Ingres,主持这个项目的 Michael Stronebraker 于 2015 年获得图灵奖。后来项目更名为 Post-Ingres,项目基于 BSD license 下开源。 1995 年几个 UCB 的学生为 Post-Ingres 开发了 SQL 的接口,正式发布了 PostgreSQL95,随后一步步在开源社区中成长起来。 和 MySQL 一样,PostgreSQL 也是一个单机的关系型数据库,但是与 MySQL […]

龙生   22 Jul 2016
View Details

六个藉藉无名但迅速崛起的Apache大数据项目

如今全球各地的无数企业组织在处理数据集,这些数据集是如此地庞大而复杂,以至于传统的数据处理应用软件再也无法支持经过优化的数据分析和洞察力获取。这是新一批大数据应用软件旨在解决的问题,而Apache软件基金会(ASF)最近将一批值得关注的开源大数据项目升级为Apache顶级项目。这意味着,这些项目将获得积极的开发和强有力的社区支持。 (图片来源:Creative Commons Zero) 大多数人已听说过Apache Spark,这种大数据处理框架拥有内置模块,可用于数据流、SQL、机器学习和图形处理。IBM及其他公司正在往Spark项目投入数十亿美元的开发资金,美国宇航局和SETI研究所在开展合作,利用Spark的机器学习能力,分析数TB的复杂的外太空无线信号,搜寻可能表明存在智能外星生命的模式。 然而,另外几个最近被提升为顶级项目的Apache大数据项目同样值得关注。实际上,其中一些打造的生态系统在活动和开发上可与Spark的生态系统相媲美。本文介绍了你应该知道的几个Apache大数据项目。 下面是六个迅速崛起的项目: Kylin Apache最近宣布,Kylin项目这个脱胎于eBay的开源大数据项目已被提升为顶级项目。Kylin是一个开源分布式分析引擎,旨在提供一种基于Apache Hadoop的SQL接口和多维分析(OLAP),支持极其庞大的数据集。它仍广泛用于eBay和另外几家组织。 Apache Kylin副总裁Luke Han说:“Apache Kylin的孵化之旅已证明了开源治理在Apache软件基金会(ASF)具有的价值,并证明了围绕该项目打造一个开源社区和生态系统的力量。我们的社区在与世界上最庞大的本地开发者社区积极互动,完全依照Apache之道。” 作为一种基于Hadoop的OLAP解决方案,Apache Kylin旨在填补大数据探索与人类使用之间的空白,“让分析员、最终用户、开发人员和数据爱好者能够对庞大数据集执行交互式分析,延迟低于1秒,”据开发人员声称。他们补充道:“Apache Kylin将商业智能(BI)带回給Apache Hadoop,发掘大数据的价值。” Lens Apache最近还宣布,Apache Lens这个开源大数据和分析工具由Apache孵化器提升为顶级项目(TLP)。据宣布声称:“Apache Lens是一种统一分析平台。它为统一视图的分析查询提供了一种最佳执行环境。Apache Lens旨在通过针对多个分层数据存储系统,提供单一的数据视图,从而消除数据分析孤岛。” “通过在数据基础上提供一种联机分析处理(OLAP)模型,Lens将Apach Hadoop和传统数据仓库无缝集成起来,好比是一个整体。它还为在系统中运行的查询提供了查询历史记录和分析统计功能,另外提供了查询生命周期管理。” Apache Lens的副总裁Amareshwari Sriramadasu 说:“在ASF孵化Apache Lens是个神奇的经历。Apache Lens着眼于最终用户,解决了大数据分析领域的一个非常关键的问题。它让业务用户、分析员、数据科学家、开发人员及其他用户能够轻松处理复杂的分析,不需要了解底层的数据布局。” Ignite Apache软件基金会还宣布Apache Ingite成为了一个顶级项目。这个开源项目旨在构建一种内存中数据架构(in-memory data fabric)。 据Apache社区的成员声称:“Apache Ignite是一种高性能、集成、分布式的内存中数据架构,针对大规模数据集可实现实时计算和处理,速度比基于磁盘或闪存的传统技术要快几个数量级。它旨在可以轻松支持成本合理、基于行业标准的硬件上的分布式大规模并行架构中的新旧应用程序。” Brooklyn Apache软件基金会宣布,Apache Brooklyn现在是个顶级项目(TLP),“这标志着该项目的社区和产品已在该基金会的精英管理流程和原则下得到了妥善治理。”Brooklyn是一种应用程序蓝图和管理平台,用于跨多个数据中心集成服务,并集成云端的众多软件。 据Brooklyn宣布声称:“由于现代应用程序由许多组件构成,微服务架构日前受到关注,部署应用程序和已部署应用程序的日常改进成了一个越来越难的问题。Apache Brooklyn的蓝图提供了一种清晰简洁的方式,可以在部署到公共云或私有基础设施之前,明确应用程序、组件、配置以及组件之间的关系。基于策略的管理建立在自主计算理论这个基础上,不断评估运行中的应用程序,并对它进行改动,让应用程序保持顺畅运行,并且针对成本和响应能力等度量指标进行优化。” Brooklyn现用于一些知名企业组织。云服务提供商Canopy和Virtustream已开发了基于Brooklyn的产品。IBM也广泛使用Apache Brooklyn,以便将大量的工作负载从AWS迁移到IBM Softlayer。 Apex 今年4月份,Apache软件基金会将Apex项目提升为顶级项目。它号称是“面向Apache Hadoop生态系统的一种大规模、高吞吐量、低延时、容错、统一的大数据数据流和批量处理平台。”Apex可与Apache Hadoop YARN协同运行,后者是一种适用于Hadoop集群的资源管理平台。 Tajo 最后,Apache Tajo是需要了解的另一个新的大数据项目,这是Apache Hadoop中一个先进的开源数据仓库系统。Apache声称,Tajo为Hadoop部署系统、第三方数据库和商用商业智能工具提供了快速获取更多信息的功能。 很显然,虽然Apache Spark吸引了大量眼球,但它不是Apache提供的唯一引人注目的大数据工具。今年,Apache可能会将更引人注目的大数据项目提升为顶级项目,这些项目将得益于经过优化的开发资源及更多优势。 原文标题:On the Rise: Six Unsung Apache Big Data Projects   from:http://developer.51cto.com/art/201606/513276.htm

龙生   30 Jun 2016
View Details

关于redis、memcached、mongoDB 的对比

从以下几个维度,对redis、memcached、mongoDB 做了对比,欢迎拍砖 1、性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面redis和memcached差不多,要大于mongodb 2、操作的便利性       memcached数据结构单一       redis丰富一些,数据操作方面,redis更好一些,较少的网络IO次数        mongodb支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富 3、内存空间的大小和数据量的大小        redis在2.0版本后增加了自己的VM特性,突破物理内存的限制;可以对key value设置过期时间(类似memcache)        memcached可以修改最大可用内存,采用LRU算法        mongoDB适合大数据量的存储,依赖操作系统VM做内存管理,吃内存也比较厉害,服务不要和别的服务在一起 4、可用性(单点问题) 对于单点问题,              redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题, 所以单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致hash 机制。 一种替代方案是,不用redis本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡              Memcached本身没有数据冗余机制,也没必要;对于故障预防,采用依赖成熟的hash或者环状的算法,解决单点故障引起的抖动问题。              mongoDB支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制。 5、可靠性(持久化) 对于数据持久化和数据恢复,          redis支持(快照、AOF):依赖快照进行持久化,aof增强了可靠性的同时,对性能有所影响           memcached不支持,通常用在做缓存,提升性能;           MongoDB从1.8版本开始采用binlog方式支持持久化的可靠性 6、数据一致性(事务支持)          Memcached 在并发场景下,用cas保证一致性         redis事务支持比较弱,只能保证事务中的每个操作连续执行         mongoDB不支持事务 7、数据分析          mongoDB内置了数据分析的功能(mapreduce),其他不支持 8、应用场景         redis:数据量较小的高性能操作和运算上         memcached:用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用sharding)         MongoDB:主要解决海量数据的访问效率问题 from:http://blog.csdn.net/yangbutao/article/details/7437290

龙生   23 Oct 2015
View Details

通C#访问MongoDB数据

开始: 先下载个C#的驱动。MongoDB提供各种主流与非主流预言的开发驱动。 C# Driver 下载地址:猛击这里 CSharp Driver Tutorial:猛击这里 下载文件安装或者解压缩包 如果您是安装,请到安装位置寻找,如果是ZIP压缩包,解压缩包得到如下两个文件: MongoDB.Bson.dll              :序列化、Json相关 MongoDB.Driver.dll             :我们的驱动 没了,只有这两个文件是我们的最爱。   继续: 新建一个C#的项目,不管你是vs2008,还是vs2010,也许您手中有vs2012?也发给我一份吧。感谢共享:) 添加引用,将上面两个DLL引入到项目里面   您启动Mongod.exe了吗?启动服务。   代码里面添加命名空间: using MongoDB.Bson; using MongoDB.Driver; 跟着[CSharp Driver Tutorial:猛击这里]继续做。如果您没有打开[CSharp Driver Tutorial]就不要开了,看完全文再看,以免分散精力。 //  MongoDB连接串,以[mongodb: // ]开头。这里,我们连接的是本机的服务 string  connectionString  =   " mongodb://localhost " ; //  连接到一个MongoServer上 MongoServer server  =  MongoServer.Create(connectionString); MongoDb的连接串 在连接串中,我们可以指定其他机器上的服务和连接端口格式如下: mongodb://[username:password@]hostname[:port][/[database][?options]] 简单示例:mongodb://server1,server2:27017,server2:27018 更进一步详细的信息请查看[CSharp Driver Tutorial:猛击这里] MongoServer 有几种不同的重载了的创建方式: MongoServer Create()   如果只是连接本机,并且本机只启动了一个服务,直接调用这个方法,完全不需要连接串 MongoServer Create(MongoConnectionStringBuilder builder) MongoServer Create(MongoUrl url) MongoServer Create(string connectionString) MongoServer Create(Uri uri) 更进一步详细的信息请查看[CSharp Driver Tutorial:猛击这里] 继续: 再增加几行代码: //  MongoDB连接串,以[mongodb: // ]开头。这里,我们连接的是本机的服务 string  connectionString  =   " mongodb://localhost […]

龙生   05 Apr 2015
View Details

关于Mongodb启动服务时1067错误的解决方法

如图:按照官网Install MongoDB on Windows(参考文尾备注)章节介绍安装完服务之后,无论是命令行net start mongodb,还是在系统服务中启动MongoDB服务,都会提示1067的错误。 网上有些说删除Mongodb数据库目录下的mongod.lock文件之后可以正常重启服务,但是笔者试了之后还是不行,也觉得删除这类文件是治标不治本或者不安全的。 仔细看了下上面链接中的文档,因为我并未按照默认的C:\路径安装Mongodb,以及在C:\下面md data文件存放数据库,而是放在了D:\MongoDB(程序目录),以及D:\DB_MongoDB(数据库目录),初步觉得问题就出在这个问题之上。         如图,在mongod.cfg文件中指定了dbpath,再启动服务,就正常了。 (不止dbpath,其它必要的配置不正确或者不完全也可能导致1067服务启动失败的情况。) 备注: 官方安装Mongodb的Windows服务说明可能在更新,一般可按照以下方法直接安装Windows服务: ? 1 D:\Program Files\MongoDB 2.6 Standard\bin>mongod --install --serviceName MongoDB --serviceDisplayName MongoDB --logpath D:\Program Files\MongoDB 2.6 Standard\log\MongoDB.Log --dbpath D:\Program Files\MongoDB 2.6 Standard\db --directoryperdb 需要注意的是,log与db目录都要事先创建。   from:http://my.oschina.net/iuranus/blog/176258

龙生   04 Apr 2015
View Details

Mongodb 安装 以及 问题解决

一,下载 1.官网为:http://www.mongodb.org/ ;下载安装程序的地址为:http://www.mongodb.org/downloads ,选择选择的是Windows 32-bit 2.4.0版本。 2.下载MongoDB For .net 驱动开发包,官方的c#driver位于driver菜单下,地址为:https://github.com/mongodb/mongo-csharp-driver/downloads。这里还了解到有samus驱动下载地址:https://github.com/samus/mongodb-csharp 二,安装 1.将mongodb-win32-i386-2.4.0.zip解压到目录E:\mongodb-2.4.0,也就是把Bin目录放在该文件夹下。 2.在E:\mongodb-2.4.0创建Data文件夹,然后在该目录下分别创建db,log两个文件夹,至此E:\mongodb-2.4.0文件目录下有三个文件夹(bin,data,log). 3.在log文件夹下创建一个日志文件log.log,即完全目录为:E:\mongodb-2.4.0\log\log.log. 4. 程序启动方式 进入bin目录,在目录上输入cmd ,回车 弹出CMD窗口 mongod -dbpath "E:\mongodb-2.4.0\data\db" 执行此命令即将mongodb的数据库文件创建到C:\Program Files\mongodb\data\db 目录。 接着将Mongodb安装成windows服务 mongod --logpath "E:\mongodb-2.4.0\log\log.log"  --logappend --dbpath "E:\mongodb-2.4.0\data\db" --directoryperdb --install 测试数据库操作 在bin目录打开 mongo.exe   >help (查看相关信息) >db.foo.insert({test:100}) (往foo表插入test,100字段值,foo表为默认表) >db.foo.find() (查看foo表数据) 结果如下: 可以看到插入了2条记录分别人set,test 其它命令可查阅help命令或官网说明。               遇到的问题解决 ——————————————-- 1. 首先,当然是下载 MongoDB MongoDB的官方网站是:http://www.mongodb.org/, 最新版本下载在:http://www.mongodb.org/downloads 。请注意下载适合自己系统的安装包,我选择的是:Windows 64-bit 2008 R2+。 下载后的文件名称是:mongodb-win32-x86_64-2008plus-ssl-3.0.1-signed.msi ,点击安装。   根据官方文档:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/ Starting in version 2.2, MongoDB does not support Windows XP. Please use a more recent version of Windows to use more recent releases of MongoDB. 大意是:从版本2.2开始,MongoDB不支持Windows XP。请用较新版本的Windows来使用MongoDB的最新版本。     2. 创建数据库文件的存放位置 […]

龙生   04 Apr 2015
View Details

MongoDB 管理

1.启动和停止MongoDB 执行mongod,启动MongoDB服务器。mongod有很多选项,在命令中执行 mongod --help 主要选项如下: --dbpath 指定数据目录,默认值是C:\data\db。每个mongod进程都需要独立的数据目录。如果要是有3个mongod 实例,那么必须有3个独立的数据目录。当mongod启动时,会在数据库目录中创建mongod.lock文件 这个文件用于防止其他的mongod纯净使用该数据目录。 --port 指定服务器监听的端口号,默认端口27017.要运行多个mongod进程,则要给每个指定不同的端口号。 --logpath 指定日志的输出路径。如果对文件夹有读写权限,系统会在文件不存在时创建它。它会将已有文件覆盖掉, 清除所有原来的日志记录。如果想要保留原来的日志,需使用--logappend选项。 --config 指定配置文件,加载命令行未指定的各种选项。   2.从配置文件启动 MongoDB支持从文件获取配置信息.当需要配置非常多或者要自动化MongoDB的启动时会用到. 指定配置文件可以用-f或--config选项. 如: mongod --config refactorConfig.txt refactorConfig.txt内容如下: #start MongoDB port = 10000 dbpath = "f:\mongo\db" logpath = "f:\mongo\log\MongoDB.txt" rest = true 配置文件和命令行的功能一样 mongod --dbpath "f:\mongo\db" --logpath "f:\mongo\log\MongoDB.txt" --rest --port 10000 配置文件的特点: a.以#开头的行是注释 b.指定选项的语法是这种"选项=值"的形式.选项是区分大小写的. c.命令行如--rest的开关选项,值要设为true   3.停止MongoDB 可以使用shutdown命令{"shutdown":1},这个命令要在admin数据库下使用.shell还提供了辅助函数: use admin db.shutdownServer()   4. 监控 使用管理接口,默认情况下,启动mongod会启动基本的http服务器,该服务的默认端口是28017.可以在浏览器中输入 localhost:28017.有些链接需要在mongod启动时,用--rest选项开启rest支持 才能进去.当开启rest支持后,可以 在mongod启动时使用--nohttpinterface来关闭管理接口.   5.serverStatus 要获取运行中的MongoDB服务器统计信息,最基本的工具是serverStatus命令 db.runCommand({"serverStatus":1}) serverStatus返回的键解释: "globalLock"的值表示全局写入锁占用了服务器多少时间(单位微秒) "mem"包含服务器内存映射了多少数据,服务器进程的虚拟内存和常驻内存的占用情况(单位MB) "indexCounters"表示B树在磁盘检索("misses")和内存检索("hits")的次数.如果这个比值开始上升,就要考虑加内存了. "backgroundFlushing"表示后台做了多少次fsync以及用了多少时间 "opcounters"文档包含了每种主要操作的次数 "asserts"统计了断言的次数   6.mongostat serverStatus虽然强大,但对服务器的监控来说不怎么容易.MongoDB提供了mongostat mongostat输出一些serverStatus提供的重要信息,它会每秒输出新的一行,比之前看到的静态数据实时性要好. 它输出多个列,分别是 inserts/s commands/s vsize 和 %locked,与serverStatus的数据相对应. 还可以使用第三方插件进行数据库的监控.   […]

龙生   04 Apr 2015
View Details

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。 原文链接:http://www.cnblogs.com/sunli/archive/2011/03/31/nosql-architecture-practice_3.html 转自:http://database.51cto.com/art/201103/252469.htm

龙生   25 Jun 2013
View Details