0、写在前面
关系型数据库 与 非关系型数据库 区别?
① 数据的存储方式不同。
关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集
中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。② 扩展方式不同。
SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。
因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。而NoSQL数据库是横向扩展的。
非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
③ 对事务性的支持不同。
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。
1、什么是NoSQL?
NoSQL( NoSQL = Not Only SQL ),意味反SQL运动,是一项全新的数据库革命性运动,2000年以前就有人提出,发展至2009年趋势越发高涨,它是指运用非关系型的数据存储,相对于铺天盖地的关系型数据库应用,这一概念无疑是一种全新的思维的注入。
随着互联网web2.0网站的兴起,传统的关系数据库在应付web 2.0网站,特别是超大规模和高并发的SNS类型的web 2.0 纯动态网站已经显得力不从心。暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是未来解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
2、NoSQL的特性
NoSQL是key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等。
这类数据库主要有以下特点:非关系型、分布式、开源、水平可扩展( SQL数据库是纵向扩展,即提升计算机性能 )
处理超大量数据、击碎了性能瓶颈、对数据高并发读写、对海量数据的高效率存储和访问、对数据的高扩展性和高可用性。
3、什么是Redis?
Redis是一个开源的、先进的key-value存储。它通常被称为数据结构服务器,因为键可以包含string(字符串)、hash(哈希)、list(链表)、set(集合)和 zset(sorted-set 有序集合)。这些数据类型都支持push/pop、add/remove及取交集和差集及更丰富的操作。
Redis和Memcached类似,它支持存储的value类型相对更多,与memcached一样,为了保证效率,数据都是缓存在内存中
,区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件( 持久化 ),并且在此基础上实现了master-slave(主从)同步。
4、从场景实例来看非关系型数据库Redis的优点。
拿购物网站来说:
搜索手机选项,数据库中大概有103万+条数据,
当选择了相关限制条件之后,数据内容就会少很多,如果我们是从关系型数据库中103万+的数据中检索出了其中的几条数据,这是多浪费资源的操作啊,并且假如同时有一个用户使用了和我一摸一样的限制条件,难道还要再去数据库中执行一遍检索,从百万条数据中检索出其中几条数据吗?这得多浪费资源啊!那再加入数据量达到一定程度,同时有N个用户进行同样的检索操作呢?
所以为了解决上面提到的性能资源浪费的问题,我们就用Redis来做这件事情。
如下图所示,荣耀的数据库只存放着荣耀系列手机的相关数据,3000-5000数据库只存放着价位在3000-5000之间的相关数据。当用户在查询时使用了 “荣耀手机”、“3000-5000”的限制条件,那么此时就会在内存中建立一个临时数据表,其中存放的数据内容就是“荣耀数据库” 与 “3000-5000” 数据库内容的交集,并且这个表仅会临时存在,当其他用户查询时使用了相同的限制条件,就会直接将这个临时数据库的内容返还给用户,这样就不用去数据库中的海量数据中检索了,节省出了系统资源给其他的查询操作去使用。
这就是Redis的一个作用,通过Redis来快速实现查询的一个缓存,减轻数据库的压力。
5、Redis 与 SQL 数据库的关系
当一个网站使用了 SQL 数据库和 Redis 数据库的时候,数据内容是存放在SQL数据库当中的,其网站代码中既有Redis的连接函数,又有SQL的连接函数,当使用其网站界面进行检索的时候,并且优先选择Redis进行查询,如果Redis中有用户需要查询的内容,则直接把数据传给用户;如果没有,则使用sql函数连接sql数据库,从sql数据库中一点点的检索,然后回给用户一份,插入到Redis中一份( 且Redis中的不是永久存在的,存放在内存中 ),由此可以看出Redis就是用来做缓存的,缓存的就是从SQL数据库中查询到的一部分数据。