部分内容源于别人的帖子,因为这些都是收集整理以前的内容,所以找不到原文链接,望见谅!
SQL对比NoSQL
SQL数据库:
1)使用表存储相关的数据
2)使用表之前先定义表的模式
3)使用使规范化来减少数据的冗余
4)支持使用JOIN操作,使用一条SQL语句从多张表中取出相关的数据
5)需要满足数据完整性约束规则
6)使用事务来保证数据的一致性
7)能够大规模的使用
8)使用强大的SQL语音进行查询操作
9)提供大量的支持,专业技能和辅助工具
NoSQL数据库:易扩展,大数据量,高性能,灵活的数据模型,高可用
1)存储数据不需要特定的模式
2)使用非规范化的标准存储信息,以保证一个文档中包含一个条目的所有信息
3)不需要使用JOIN操作
4)允许数据不用通过验证就可以存储到任意的位置
5)保证更新的单个文档,而不是多个文档
6)提供卓越的性能和可扩展性
7)使用JSON数据对象进行查询
8)新型技术
NoSQL分类:
1)键值存储,如Redis(优势:快速查询,劣势:存储数据缺少结构化)
2)列存储,如HBase(优势,快速查询,扩展性强,劣势:功能相对局限)
3)文档数据库,如MongoDB(一句话概括:MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。优势:数据结构要求不严格,劣势:查询性能不高,统一查询的语法)
4)图形数据库,如InfoGrid(优势:利用图结构相关算法,劣势:需要对整个图做计算才能得到结果,不容易做分布式的集群方案)
对比
SQL是精确的:适合于具有精确标准的定义明确的项目,如在线商店和银行系统
NoSQL是多变的:适合于具有不确定需求的数据,如社交网络、客户管理和网络分析系统
一句话概括NoSQL现在流行的原因:传统的关系型数据库满足不了数据的高并发读写和海量数据的高效率存储访问
//***************************我是邪恶的分割线***************************************
1.什么是Redis?
Redis 是一个基于内存的高性能key-value数据库。
2.Reids的特点
Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。
Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
3.使用redis有哪些好处?
(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
(2) 支持丰富数据类型,支持string,list,set,sorted set,hash
(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
4.redis相比memcached有哪些优势?
(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) redis的速度比memcached快很多 (3) redis可以持久化其数据
5.Memcache与Redis的区别都有哪些?
1)、存储方式 Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis有部份存在硬盘上,这样能保证数据的持久性。
2)、数据支持类型 Memcache对数据类型支持相对简单。 Redis有复杂的数据类型。
3)、使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。 Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
6.redis常见性能问题和解决方案:
1).Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。
2).Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。
3).Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。
4). Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内
7. mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据
redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略(回收策略)