什么是nosql_什么是NoSQL?

什么是nosql

NoSQL是用于指代与传统关系数据库管理系统(RDBMS)在许多方面不同的一类数据库系统的术语。 使用SQL访问RDBMS。 因此,术语NoSQL表示不被SQL访问。 更具体地说,不是RDBMS,或者更准确地说,是非关系的。

NqSQL数据库的一些关键特征是:

  • 它们是分布式的,可以水平伸缩,并且可以处理数TB或PB数量级的数据量,而延迟时间很短。
  • 与传统的RDBMS相比,它们的刚性模式更少。
  • 他们的交易担保较弱。
  • 顾名思义,这些数据库不支持SQL。
  • 许多NoSQL数据库将数据建模为具有列族,键值对或文档的行

要了解非关系的含义,回顾一下关系的含义可能会很有用。

从理论上讲,关系数据库符合关系模型的Codds 12规则。 更简单地说,在RDBMS中,表是关系,数据库具有一组这样的关系。 一个表有行和列。 每个表都有约束,数据库会强制执行约束以确保数据的完整性。表中的每一行都由主键标识,并且表使用外键进行关联。 通过将列移到单独的表中,但使用外键保持关系,可以消除标准化过程中的重复数据。 要从多个表中获取数据,需要使用外键联接表。 这种关系模型在建模大多数现实世界问题中非常有用,并且在过去20年中得到了广泛使用。

此外,RDBMS供应商已竭尽全力确保RDBMS在维护ACID(有序,一致,完整性,持久性)存储的事务属性方面做得很好。 支持意外故障的恢复。 这导致关系数据库成为存储企业数据的事实上的标准。

如果RDBMS这么好,为什么有人需要NoSQL数据库?

即使是最大的企业,用户的数量也只有1000s左右,而数据需求则只有几个terra字节。 但是,当您的应用程序位于Internet上时,您正在以PB的级别处理数百万个用户和数据,因此RDBMS的运行速度开始放缓。 任何数据库的基本操作都是读写的。 可以通过将数据复制到多台计算机并平衡读取请求的负载来扩展读取。 但是,这不适用于写操作,因为需要保持数据一致性。 只能通过对数据进行分区来缩放写入。 但这会影响读取,因为分布式联接可能很慢且难以实现。 此外,为了维护ACID属性,数据库需要以性能为代价锁定数据。

Google,facebook,Twitters发现,放宽RDBMS的约束并分发数据可以使它们在涉及以下用例的情况下具有更好的性能。

  • PB级的大型数据集。 通常,这需要使用多台计算机进行存储。
  • 该应用程序执行大量写操作。
  • 读取要求低延迟。
  • 数据是半结构化的。
  • 您需要能够扩展而不会遇到瓶颈。
  • 应用程序知道它在寻找什么。 临时查询不是必需的。

NoSQL解决方案有哪些?

有几种不同的类型。

1.关键值存储

它们允许客户端使用密钥读取和写入值。 亚马逊的Dynamo是键值存储的一个示例。

get(key)返回一个对象或对象列表
put(key,object)将对象存储为Blob

Dynamo使用哈希在存储数据的主机之间划分数据。 为了确保高可用性,每个写入都在多个主机之间复制。 主机是平等的,没有主人。 Dynamo的优点是键值模型很简单,并且对于写操作非常有用。

2.文件存储

构成数据的键值对被封装为文档。 Apache CouchDB是文档存储的示例。 在CouchDB中,文档具有字段。 每个字段都有一个键和值。 一个文件可能是

"firstname " : " John ",
"lastname " : "Doe" ,
"street " : "1 main st",
"city " : "New york"

在CouchDB中,分发和复制是对等的。 客户端接口是RESTful HTTP,可与现有HTTP负载平衡解决方案很好地集成。

3.基于列的商店

读取和写入使用列而不是行完成。 最著名的例子是Google的BigTable,以及受BigTable启发的HBase和Cassandra之类的东西。 BigTable论文说BigTable是一个稀疏,分布式,持久性,多维排序的Map。 虽然该句子看起来很复杂,但逐个阅读每个单词可以使内容更清晰。

  • 稀疏-一些单元格可以为空
  • 分布式–数据跨许多主机分区
  • 持久–存储到磁盘
  • 多维–大于1维
  • 地图–关键和价值
  • 已排序-地图通常不排序,但是这是

该示例可以帮助您可视化BigTable地图

{
row1:{
    user:{
          name: john
          id : 123
    },
    post: {
          title:This is a post    
          text : xyxyxyxx
    }
}
row2:{
    user:{
          name: joe
          id : 124
    },
    post: {
          title:This is a post    
          text : xyxyxyxx
    }
}
row3:{
    user:{
          name: jill
          id : 125
    },
    post: {
          title:This is a post    
          text : xyxyxyxx
    }
}

}

最外面的键row1,row2,row3与row类似。 用户和帖子称为列族。 列族用户具有列名和ID。 帖子具有标题和文本列。

Columnfamily:column是您引用列的方式。 例如,user:id或post:text。 在Hbase中,当您创建表时,需要指定列族。 但是可以随时添加列。 HBase使用主从架构提供了高可用性和可伸缩性。

我需要一个NoSQL存储吗?

如果不需要,则不需要NoSQL存储

  • 您所有的数据都可以放入一台计算机中,不需要分区。
  • 您正在执行OLTP,这需要RDBMS擅长的ACID事务属性和数据一致性。
  • 您需要使用SQL之类的语言进行临时查询。
  • 您的应用程序中的实体之间存在复杂的关系。
  • 将数据与应用程序分离对您很重要。

如果可能,您可能要开始考虑NoSQL存储

  • 您的数据已经变得如此庞大,以至于没有分区就无法处理。
  • 您的RDBMS无法再处理负载。
  • 您需要非常高的写入性能和低延迟读取。
  • 您的数据不是很结构化。
  • 您不可能有单点故障。
  • 您可以容忍某些数据不一致。

最重要的是,NoSql存储是一项新的复杂技术。 有很多选择,没有标准。 在某些特定的使用案例中,NoSql非常适合。 但是RDBMS对于大多数普通用例来说都很好。

参考: 什么是NoSQL? 来自我们的JCG合作伙伴 Manoj KhangaonkarThe Khangaonkar Report上的报道

相关文章 :

翻译自: https://www.javacodegeeks.com/2011/11/what-is-nosql.html

什么是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、付费专栏及课程。

余额充值