什么是nosql
NoSQL(NoSQL = Not Only SQL ),意为反 SQL 运动,是一项全新的数据库革命性运动,2000 年 前就有人提出,发展至 2009 年趋势越发高涨。它是指运用非关系型的数据存储,相对于铺天盖地的 关系型数据库运用,这一概念无疑是一种全新的思维的注入。 随着互联网 web2.0 网站的兴起,传统的关系数据库在应付 web2.0 网站,特别是超大规模和高并 发的 SNS 类型的 web2.0 纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的 数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集 合多重数据种类带来的挑战,尤其是大数据应用难题。
NoSql,叫非关系型数据库,它的全名Not only sql。它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。
NoSql 的分类
键值 (Key-Value) 存储数据库
相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化
列存储数据库
相关产品:Cassandra, HBase, Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限
文档型数据库
相关产品:CouchDB、MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语法
图形 (Graph) 数据库
相关数据库:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
1. Redis
1.1 什么是 redis
Redis是使用c语言开发的一个高性能键值数据库。Redis可以通过一些键值类型来存储数据。
键值类型:
String字符类型
map散列类型
list列表类型(有序、可重复)
set集合类型(无序,不可重复)
sortedset有序集合类型
1.2 redis 的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
分类 | 举例 | 应用场景 | 数据模型 | 特点 |
---|---|---|---|---|
键值型 | Tokyo Cabinet/Tyrant, Redis, Voldemort,BDB | 内容缓存,主要用于处理大量数据 的高访问负载,也用于一些日志系统等等。 | Key 指向 Value 的键值对,通常用 hash table 来实现 | 查找速度快 |
列存储数据库 | Cassandra, HBase, | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 |
文档型数据库 | CouchDB, MongoDB | Web 应 用 ( 与 Key-Value 类似, Value是结构化的,不同的是数据库能够了解 Value 的内容) | Key-Value 对应的键值对,Value 为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 |
图形数据库 | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 利用图结构相关算法。比如最短路径寻址,多维度关系查找等 |
2、nNoSQL 特点
NoSQL 是 key-value 形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循 SQL 标准、ACID 属性、表结构等等。
这类数据库主要有以下特点:
- 非关系型的、分布式、开源的、水平可扩展的
- 处理超大量数据
- 击碎了性能瓶颈
- 对数据高并发读写
- 对海量数据的高效率存储和访问
- 对数据的高扩展性和高可用性
3、redis 介绍
Redis 是一个开源的,先进的 key-value 非关系型数据库。它通常被称为数据结构服务器,因为键可以包含 string (字符串)、hash(哈希)、list(链表)、set(集合)和 zset(sorted-set--有序集合)。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作。
Redis 和 Memcached 类似,它支持存储的 value 类型相对更多,与 memcached 一样,为了保证效率,数据都是缓存在内存中,区别是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave(主从)同步。