很多刚入门的小伙伴可能会有疑惑,到底什么是NoSQL,很多人刚开始学习的时候很容易对NoSQL产生误会,其实NoSQL=Not Only SQL,它指的是“不仅仅是SQL”,那么它具体指代的是什么呢,它有哪些方面的特征呢,今天就和大家好好的聊一聊NoSQL。
一.什么是NoSQL?
从现在来看,在大量的现代的计算系统上,每天网络上面都会产生非常庞大的数据量。其实对于这部分数据来讲的话,它有很大的一个部分都是由关系数据库管理系统来进行处理的。 通过大量的应用实践可以证明,关系模型它其实是非常适合于客户服务器编程的,并且你可以发现它是远远超出预期利益的,而到了今天可以发现它已经成了结构化数据存储在网络和商务应用的主导技术。NoSQL是一项全新的数据库革命运动,在很早很早期的时候便就有人提出,但它是发展到2009年的时候它的趋势就变得越发高涨了。而很多NoSQL的拥护者们也提倡运用非关系型的数据存储。其实相对于铺天盖地的关系型数据库运用,这一概念毫无疑问作为了一种全新的思维注入。
二.关系型数据库与NoSQL的区别?
1.RDBMS
高度组织化的结构化数据,结构化查询语言(SQL),它的数据以及关系都是存储在单独的表中。
并且数据操纵语言,而数据又定义语言,保持严格一致性的基础事务
2.ACID
关系型数据库遵循ACID规则
事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
A (Atomicity) 原子性
原子性其实是非常容易理解的,也就是说事务里的所有操作你要么就全部做完,要么你就什么都不做,而事务成功的条件就是事务里的所有操作都要成功,只要有其中一个操作失败,那你的整个事务就都会失败,需要进行回滚。举个例子,比如说银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步骤要么你一起完成,要么你一起不完成,如果你只完成了第一步,你的第二步失败,那么你的就钱会莫名其妙少了100元。
C (Consistency) 一致性
一致性是比较容易理解的,也就是说你的数据库要一直处于一个一致的状态,而事务的运行是不会改变数据库原本的一致性约束。
I (Isolation) 独立性
所谓的独立性是指两个并发的事务之间不会进行互相的影响,如果说一个事务所要访问的数据它正在被另外一个事务修改的话,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。举个例子,比如说现有有个交易是要从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的
D (Durability) 持久性
持久性就是指一旦事务提交后,它所做的修改就将会永久的保存在数据库上,即使它出现宕机也是不会丢失的。
三.NoSQL的优点/缺点
优点:
1. 作为灵活的数据模型,它的结构更为丰富一些,很多作为传统关系型数据库都是结构化的表,但是nosql的话可以是列式存储、key-value和文档存储;
2.它相对来说更容易扩展一些,像nosql数据库分分钟就可以添加一台新的服务器了;
3.高可用。他的查询效率较高,传统关系型的数据库是受限于磁盘io的,所以在高并发的情况下,就会显得压力倍增,而像redis这种内存数据库则每秒可以支持10w次读写;
4.还有一点便是nosql成本比较低,相比较Oracle这种企业级授权费用是低了不少;
缺点:
1.不支持sql这样的工业标准查询,因此来讲它的学习成本就比较高;
2.大多数都是初创的产品,可能还不够成熟,和传统数据库几十年的完善不可相提并论;
3.大多数的nosql也都不支持事务(redis支持,MongoDB不支持);
4. nosql只能保证数据是处于相对一致性的,尤其是在数据同步的时候,主从服务器的状态是不一致的。
四.为什么要使用NoSQL
其中一个原因是因为关系数据库运行的慢,处理大数据的大多数情况是nosql比较高效,所以在目前互联网大数据的环境下nosql会越来越普及。还有NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就显得比较容易扩展。而且在无形之间,从架构的层面上来讲它带来了可扩展的能力。大数据量,高性能 NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。从现如今来看,我们可以通过第三方平台(如:Google,Facebook等)很容易的访问和抓取数据。还有像比如用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
关于NoSQL数据库的知识便为大家做了以上的介绍。大数据储存是大数据处理当中很重要的一步,这里为大家做了一个简单的介绍,其中还有许多主流的NoSQL数据库也仍然需要一定程度上的掌握。