这篇文章旨在让大家快速了解NoSQL的基本知识。
文章目录
NoSQL概述
NoSQL是对不同于传统的关联式资料库的数据库管理系统的统称。
”Not Only SQL ”,“不仅仅是SQL”。
如今,每天网络上都会产生非常庞大的数据量。这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理的。 1970年 E.F.Codd’s提出的关系模型的论文 “A relational model of data for large shared data banks”,使得数据建模和应用程序编程更加简单。
通过应用实践证明,关系模型非常适合于客户服务器编程,如今它是结构化数据存储在网络和商务应用的主导技术。
NoSQL 是一项全新的数据库革命性运动,早期就有人提出,2009年发展趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,也暴露了很多难以克服的问题。当代典型的关系数据库在一些数据敏感的应用中(例如为巨量文档创建索引、高流量网站的网页服务,以及发送流式媒体时)表现出的是糟糕的性能。
关系型数据库的典型的主要用于执行规模小而读写频繁,或者大批量极少写访问的事务中。而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。该工具可以为大数据建立快速、可扩展的存储库。
显然,NoSQL可以用于超大规模数据的存储
。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。而这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
Big Data
那么什么又是大数据(big data)呢?
大数据通常被认为是PB(1024 terabytes)或EB(1EB=100 万TB)或更高数量级的数据,包括结构化的、半结构化的和非结构化的数据,其规模或复杂程度超出了常用传统数据库和软件技术所能管理和处理的数据集范围。随着技术的发展,大数据广泛存在,如企业数据、统计数据、科学数据、医疗数据、互联网数据、移动数据、物联网数据,等等。并且各行各业都可得益于大数据的应用。
按其应用类型,可将大数据分为海量交易数据 (企业OLTP应用)、海量交互数据(社网、传感器、GPS、Web信息)和海量处理数据(企业OLAP应用)这 3 类 。
-
海量交易数据的应用特点是多为简单的读写操作,访问频繁,数据增长快,一次交易的数据量不大,但要求支持事务特性。其数据的特点是完整性好、实效性强,有强一致性要求。
-
海量处理数据的应用特点是面向海量数据分析,操作复杂,往往涉及多次迭代完成,追求数据分析的高效率,但不要求支持事务特性,典型的是采用并行与分布处理框架实现。其数据的典型特点是同构性(如关系数据或文本数据或列模式数据)和较好的稳定性(不存在频繁的写操作)。
-
海量交互数据的应用特点是实时交互性强,但不要求支持事务特性。其数据的典型特点是结构异构、不完备、数据增长快,不要求具有强一致性。
大数据带来了大机遇,同时也为有效管理和利用大数据提出了挑战。
尽管不同种类的海量数据存在一定的差异,但总体而言,支持海量数据管理的系统应具有如下特性:高可扩展性(满足数据量增长的需要)、高性能 (满足数据读写的实时性和查询处理的高性能)、容错性(保证分布系统的可用性)、可伸缩性(按需分配资源)和尽可能低的运营成本等。
然而,由于传统的关系数据库所固有的局限性,如峰值性能、伸缩性、容错性、可扩展性差等特性,很难满足海量数据的柔性管理需求。为此,提出了云环境下面向海量数据管理的新模式,如采用 NoSQL存储系统或可扩展的数据管理系统(或称关系云系统)支持海量数据的存储和柔性管理。目前,它们是云环境下所采用的典型的云存储系统。
在性能上,NoSQL数据存储系统都具有传统关系数据库所不能满足的特性,是面向应用需求而提出的各具 特色的产品。在设计上,它们都关注对数据高并发地读写和对海量数据的存储等,并具有很好的灵活性和性能。它们都支持自由的模式定义方式,可实现海量数据的快速访问,灵活的分布式体系结构支持横向可伸缩性和可用性,且对硬件的需求较低。
可扩展的数据管理系统(关系云)是侧重扩展数据库系统到云环境下,使关系云支持海量数据管理。典型的系统如微软的SQL Azure和MIT的Relational Cloud等。主要针对事务特性、系统弹性性能、多租户负载均衡技术等进行研究。
发展历史
NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。
2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。
2009年在亚特兰大举行的"no:sql(east)“讨论会是一个里程碑,其口号是"select fun, profit from real world where relational=false;”。因此,对NoSQL最普遍的解释是“非关联型的”,强调键-值存储和面向文档数据库的优点,而不是单纯的反对RDBMS。
基于2014年的收入,NoSQL市场领先企业是MarkLogic,MongoDB和Datastax。
基于2015年的人气排名,最受欢迎的NoSQL数据库是MongoDB,Apache Cassandra和Redis。
关系型数据库
我们先来看看关系型数据库的特征:
关系型数据库遵循ACID规则
事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
- 1、A (Atomicity) 原子性
一个事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成。 - 2、C (Consistency) 一致性
一致性不难理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。 - 3、I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现在有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。 - 4、D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
分布式系统简介
分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。
分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。
因此