NoSQL—非关系型数据库Redis和MongoDB的应用

回顾下基础,什么是NoSQLweb

NoSQL,即Not Only SQL,指的是非关系型的这一类数据库,它与关系型数据库的区别主要在于数据存储结构的不一样,关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据,NoSQL主要用于解决web2.0中出现的超大规模和高并发数据存取性能问题redis

为何使用NoSQL
一、超大规模,高并发读写,High performance
二、海量数据的高效率存储和访问 huge Storage
三、高可扩展性和高可用性 High Scalability High Availability算法

NoSQL的特色:
一、易扩展(数据间不要紧)
二、大数据量、高性能读写,
三、灵活的数据模型,不需创建字段
四、高可用数据库

  所以,在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增长的数据项时能够优先考虑使用NoSQL数据库。
  在考虑数据库的成熟度;支持;分析和商业智能;管理及专业性等问题时,应优先考虑关系型数据库。json

分类:NoSQL数据库产品分为键值(Key-Value)存储数据库、列存储数据库、文档型数据库图形(Graph)数据库四大类缓存

分类服务器

Examples举例网络

典型应用场景session

数据模型数据结构

优势

缺点

键值(key-value)

Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB

内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。

Key 指向 Value 的键值对,一般用hash table来实现

查找速度快

数据无结构化,一般只被看成字符串或者二进制数据

列存储数据库

Cassandra, HBase, Riak

分布式的文件系统

以列簇式存储,将同一列数据存在一块儿

查找速度快,可扩展性强,更容易进行分布式扩展

功能相对局限

文档型数据库

CouchDB, MongoDb

Web应用(与Key-Value相似,Value是结构化的,不一样的是数据库可以了解Value的内容)

Key-Value对应的键值对,Value为结构化数据

数据结构要求不严格,表结构可变,不须要像关系型数据库同样须要预先定义表结构

查询性能不高,并且缺少统一的查询语法。

图形(Graph)数据库

Neo4J, InfoGrid, Infinite Graph

社交网络,推荐系统等。专一于构建关系图谱

图结构

利用图结构相关算法。好比最短路径寻址,N度关系查找等

不少时候须要对整个图作计算才能得出须要的信息,并且这种结构不太好作分布式的集群方案 



先说说Redis

用C语言开发的可基于内存亦可持久化日志型、Key-Value型开源数据库,并提供多种语言的API 。被称为数据结构服务器

应用场景:
一、缓存,数据查询,聊天室在线好友列表
二、任务队列 抢购,
三、网站访问统计
四、应用排行榜
五、数据过时处理 精确到毫秒
六、分布式集群架构中的session分离

Redis的优势:
支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)
支持持久化操做,能够进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操做,较好的防止数据丢失的手段。
支持经过Replication进行数据复制,经过master-slave机制,能够实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。
单线程请求,全部命令串行执行,并发状况下不须要考虑数据一致性问题。
支持pub/sub消息订阅机制,能够用来进行消息订阅与通知。
支持简单的事务需求,但业界使用场景不多,并不成熟。

Redis支持主从同步。数据能够从主服务器向任意数量的从服务器上同步,从服务器能够是关联其余从服务器的主服务器。这使得Redis可执行单层树复制。存盘能够有意无心的对数据进行写操做。因为彻底实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操做的可扩展性和数据冗余颇有帮助。

Redis的局限性:
Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,平常环境中QPS高峰大约在1-2w左右)。
支持简单的事务需求,但业界使用场景不多,并不成熟,既是优势也是缺点。
Redis在string类型上会消耗较多内存,可使用dict(hash表)压缩存储以下降内存耗用。

mongoDB 

特色:(1)面向文档(2)高性能(3)高可用(4)易扩展(5)丰富的查询语言

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

适合场景:事件记录、内容管理或者博客平台,好比评论系统。

mongoDB 是一种文档性的数据库。先解释一下文档的数据库,便可以存放xml、json、bson类型系那个的数据。

这些数据具有自述性(self-describing),呈现分层的树状数据结构。redis能够用hash存放简单关系型数据。

mongoDB 存放json格式数据。

总的来讲,redis:适用于数据量较小的追求性能的操做和运算上,MongoDB:主要解决海量数据的访问效率问题