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

回顾下基础,什么是NoSQL

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

为什么使用NoSQL
1、超大规模,高并发读写,High performance
2、海量数据的高效率存储和访问 huge Storage
3、高可扩展性和高可用性 High Scalability High Availability

NoSQL的特点:
1、易扩展(数据间没关系)
2、大数据量、高性能读写,
3、灵活的数据模型,不需建立字段
4、高可用

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

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

分类

Examples举例

典型应用场景

数据模型

优点

缺点

键值(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 。被称为数据结构服务器

应用场景:
1、缓存,数据查询,聊天室在线好友列表
2、任务队列 抢购,
3、网站访问统计
4、应用排行榜
5、数据过期处理 精确到毫秒
6、分布式集群架构中的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:主要解决海量数据的访问效率问题

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页