什么是NoSQL

翻译自:https://database.guide/what-is-nosql/

NoSQL泛指特定类型的数据库模型或者数据库管理系统

NoSQL是一个非常广泛的概念,不指某一种特定的数据库模型。它指的是所有不适合于关系模型的数据库模型

虽然NoSQL数据库自1960年就已经存在了,但是直到2000年初新的NoSQL系统才开始在市场上流行

大数据问题

NoSQL开始流行的一个主要原因是大数据问题。像谷歌和亚马逊这样的大公司因为巨大的用户量开始处理海量数据。这就导致了如下情况的出现:

  • 谷歌开发了Bigtable分布式存储系统,用于管理结构化数据,旨在可靠地扩展到PB级数据和数千台计算机。Bigtable供60多个产品和项目使用,包括搜索、分析、地图和Gmail。Bigtable的目的提供广泛的适用性、可伸缩性、高性能和高可用性
  • 亚马逊开发并实施了Dynamo,这是一个高可用的键值存储系统。该系统需要保障亚马逊的核心服务始终在线。但是为了达到要求的可用性,Dynamo在故障情况下会牺牲一致性

除了谷歌和亚马逊外,还有很多其他的公司会处理大数据问题。他们也又许多创新解决方案。这导致了NoSQL系统的爆炸式增长

对于NoSQL的精确定义有很多的讨论:

  • 有人叫它"No SQL",也就是不使用SQL,使用其他查询语言
  • 有时也表示"不仅是SQL",也就是将SQL和其他查询语言一起使用
  • 大多数的观点是它们是非关系型的,可能叫NoREL更合适

NoSQL这个词实际上是Eric Evans在2009年的一次会议上提出的Twitter主题标签,该会议讨论了大数据和线性可扩张的分布式系统

NoSQL数据库的特征

NoSQL通常指的是具有某些特定特征的的一组DBMS,特征如下:

  • 非关系
  • 开源
  • 模式少
  • 水平可扩展
  • 缺乏对ACID原则的支持
  • 没有标准查询语言

不是所有的数据库都具有以上特征,许多数据库只具有上述的几个特征。但是关系型数据库只有以上极少的几种特征

非关系

非关系型DBMS被构建成非关系的一个原因是关系模型不适合要求

数据可能是半结构化和非结构化的或者数据量很大,需要一种有效的方式进行数据存储和检索。也可能是系统需要扩展到数百或者数千台计算机,也有可能完全是其他原因

无论如何都需要建立一种新的方案来解决需求

开源

大多数的NoSQL DBMS是开源的,虽然也有很多开源的关系DBMS。但是NoSQL更倾向于开源

Schema-Less

大多数NoSQL没有固定的schema。关系DBMS在输入任何数据之前需要对schmea进行建模和创建,而NoSQL数据库则没有此要求。

NoSQL数据库只需要给出一个名字,这使得其接受的数据更加灵活,并支持敏捷开发

水平可扩展

大多数NoSQL都是集群模式的,通过在多台计算机上对数据进行分区使得每台计算机都可以独立执行特定的任务。每个进程可以执行其任务,而不需要与其他进程共享内存或者磁盘空间,这叫做无共享架构。

虽然关系型数据库也可以是集群的,但是往往比较困难。而且性能上也会收到影响。关系型数据库更适合扩展,也就是可以通过添加计算机来添加更多的资源

缺乏对ACID的支持

大多数NoSQL在某种程度上对ACID的支持比较松。这是因为大多数的NoSQL都是为了实现高可用性和高扩展性而开发的。当提供高可用性的时候,就需要牺牲一执行和容忍性(或者在三者之间保持平衡)。通过放宽一致性可以提供可用性。

但是有些NoSQL系统(MarkLogic,Neo4j和OrientDB)确实支持ACID事物

没有标准查询语言

当前没有所有NoSQL都支持的查询语言。尽管已经尝试为所有NoSQL数据库引入标准查询语言,但是都没有成功。某些NoSQL DBMS具有自己的查询语言,而另一些支持各种语言,例如JSON,XQuery,SPARQL等。

第一个NoSQL数据库

这些年来有许多“non SQL”数据库,甚至在1974第一次提出SQL,在1979年第一个RDBMS诞生之前就已经存在数据库了。

这是有史以来第一次构建的三个(NoSQL)数据库管理系统:

  • MultiValue:是NoSQL数据库,最早于1965年作为Pick操作系统的一部分开发。
  • MUMPS:(马萨诸塞州总医院公用事业多程序系统)自1966年以来一直存在。MUMPS是无模式的,使用键值数据库引擎,是NoSQL数据库的经典示例
  • IBM IMS:是于1996年开发的联合分层数据库和信息管理系统。

当然,没有人称这些为“ NoSQL”数据库,甚至还没有发明SQL。直到2009年之后,这些旧的DBMS才与NoSQL相关联。

NoSQ - 关系型数据库

NoSQL是最初由Carlo Strozzi在1998年开发的关系数据库管理系的名称。

之所以命名为NoSQL(RDBMS),是因为它不使用SQL作为其查询语言。 NoSQL(RDBMS)与2009年开始的NoSQL运动没有任何联系。

关系型数据库NoSQL数据库 什么是NoSQL 大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是“Not Only SQL”的缩写。它的意义是:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。 为弥补关系型数据库的不足,各种各样的NoSQL数据库应运而生。 为了更好地了解本书所介绍的NoSQL数据库,对关系型数据库的理解是必不可少的。那么,就让我们先来看一看关系型数据库的历史、分类和特征吧。 关系型数据库简史 1969年,埃德加•弗兰克•科德(Edgar Frank Codd)发表了划时代的论文,首次提出了关系数据模型的概念。但可惜的是,刊登论文的《IBM Research Report》只是IBM公司的内部刊物,因此论文反响平平。1970年,他再次在刊物《Communication of the ACM》上发表了题为“A Relational Model of Data for Large Shared Data banks”(大型共享数据库的关系模型)的论文,终于引起了大家的关注。 科德所提出的关系数据模型的概念成为了现今关系型数据库的基础。当时的关系型数据库由于硬件性能低劣、处理速度过慢而迟迟没有得到实际应用。但之后随着硬件性能的提升,加之使用简单、性能优越等优点,关系型数据库得到了广泛的应用。 通用性及高性能 虽然本书是讲解NoSQL数据库的,但有一个重要的大前提,请大家一定不要误解。这个大前提就是“关系型数据库的性能绝对不低,它具有非常好的通用性和非常高的性能”。毫无疑问,对于绝大多数的应用来说它都是最有效的解决方案。 突出的优势 关系型数据库作为应用广泛的通用型数据库,它的突出优势主要有以下几点: 保持数据的一致性(事务处理) 由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处) 可以进行JOIN等复杂查询 存在很多实际成果和专业技术信息(成熟的技术) 这其中,能够保持数据的一致性是关系型数据库的最大优势。在需要严格保证数据一致性和处理完整性的情况下,用关系型数据库是肯定没有错的。但是有些情况不需要JOIN,对上述关系型数据库的优点也没有什么特别需要,这时似乎也就没有必要拘泥于关系型数据库了。 关系型数据库的不足 不擅长的处理 就像之前提到的那样,关系型数据库的性能非常高。但是它毕竟是一个通用型的数据库,并不能完全适应所有的用途。具体来说它并不擅长以下处理: 大量数据的写入处理 为有数据更新的表做索引或表结构(schema)变更 字段不固定时应用 对简单查询需要快速返回结果的处理 。。。。。。 NoSQL数据库 为了弥补关系型数据库的不足(特别是最近几年),NoSQL数据库出现了。关系型数据库应用广泛,能进行事务处理和JOIN等复杂处理。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。 易于数据的分散 如前所述,关系型数据库并不擅长大量数据的写入处理。原本关系型数据库就是以JOIN为前提的,就是说,各个数据之间存在关联是关系型数据库得名的主要原因。为了进行JOIN处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散。相反,NoSQL数据库原本就不支持JOIN处理,各个数据都是独立设计的,很容易把数据分散到多个服务器上。由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也更加容易。同理,数据的读入操作当然也同样容易。 提升性能和增大规模 下面说一点题外话,如果想要使服务器能够轻松地处理更大量的数据,那么只有两个选择:一是提升性能,二是增大规模。下面我们来整理一下这两者的不同。 首先,提升性能指的就是通过提升现行服务器自身的性能来提高处理能力。这是非常简单的方法,程序方面也不需要进行变更,但需要一些费用。若要购买性能翻倍的服务器,需要花费的资金往往不只是原来的2倍,可能需要多达5到10倍。这种方法虽然简单,但是成本较高。 另一方面,增大规模指的是使用多台廉价的服务器来提高处理能力。它需要对程序进行变更,但由于使用廉价的服务器,可以控制成本。另外,以后只要依葫芦画瓢增加廉价服务器的数量就可以了。 不对大量数据进行处理的话就没有使用的必要吗? NoSQL数据库基本上来说为了“使大量数据的写入处理更加容易(让增加服务器数量更容易)”而设计的。但如果不是对大量数据进行操作的话,NoSQ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值