什么是NoSQL数据库?

NoSQL包含了各种不同的数据库技术,这些技术是为满足构建现代应用程序的需求而开发的:

开发人员正在与创建大量新数据类型(结构化、半结构化、非结构化和多态数据)的应用程序一起工作。

12到18个月的瀑布开发周期早已过去。现在,小团队以短而快的方式工作,每周或每两周快速迭代并推送代码,有些甚至每天多次。

曾经为了服务于有限受众的应用程序现在作为服务提供者,必须始终在线,可以从许多不同的设备访问,并在全球范围内扩展到数百万用户。

组织现在正转向使用开源软件、商品服务器和云计算的扩展架构,而不是大型单片服务器和存储基础架构。

关系数据库的设计不是为了应付现代应用程序所面临的规模和敏捷性挑战,也不是为了利用当今可用的商品存储和处理能力而构建的。

NoSQL数据库类型

文档数据库将每个键与称为文档的复杂数据结构配对。文档可以包含许多不同的键-值对,或键-数组对,甚至嵌套文档。

图形存储储用于存储关于数据网络的信息,例如社交连接。图形存储包括Neo4J和Giraph。

键值存储是最简单的NoSQL数据库。数据库中的每个项目都存储为一个属性名称(或“键”)的兴衰存储在其中。键值存储的例子有Riak和Berkeley DB。一些键值存储,比如“Redis”允许每个值都有一个类型,比如“integer”,它增加了功能。

宽列存储像Cassandra和HBase这样的宽列存储对大型数据集的查询进行了优化,并将数据列(不是行)存储在一起。

NoSQL的好处

与关系型数据库相比,NoSQL数据库具有更高的可伸缩性和更好的性能,其数据模型解决了关系模型不能解决的几个问题:
大量快速变化的结构化,半结构化和非结构化数据

敏捷冲刺、快速模式迭代和频繁的代码推送

易于使用和灵活的面向对象编程

在地理上分布式横向的扩展架构,而不是昂贵的单一架构

动态模式

关系数据库要求在添加数据之前定义模式。例如,您可能希望存储关于客户的数据,例如电话号码、姓名、地址、城市和州——SQL数据库需要提前知道您存储的是什么内容。

这与适应敏捷的开发方法不太吻合,因为每次完成新功能时,数据库的架构往往都需要改变。因此,如果您决定进行几次迭代开发,除了地址和电话号码之外,您还希望存储客户喜欢的项目,则需要将该列添加到数据库,然後将整个数据库迁移到新的模式。

如果数据库很大,这是一个非常缓慢的过程,需要大量停机时间。如果您频繁地更改应用程序存储的数据(因为您正在快速迭代),那么停机时间可能也很频繁。另外,使用关系数据库也无法有效地提前处理完全非结构化或未知的数据。

构建NoSQL数据库是为了允许在没有预定义模式的情况下插入数据。这使得实时地进行重要的应用程序更改变得很容易,而不用担心服务中断——这意味着开发速度更快,代码集成更可靠,并且需要更少的数据库管理员时间。开发人员通常不得不添加应用程序端代码来强制执行数据质量控制,例如强制指定特定字段、数据类型或允许值。更复杂的NoSQL数据库允许在数据库中应用验证规则,允许用户跨数据执行治理,同时保持动态模式的灵活性。

自动分片

由于它们是结构化的,关系数据库通常垂直扩展——单个服务器必须承载整个数据库,以确保交叉连接和事务的可接受性能。这会迅速变得昂贵,限制了规模,并为数据库基础设施创建了相对较少的故障点。支持快速增长的应用程序的解决方案是通过添加服务器而不是将更多的容量集中在单个服务器上来水平扩展。

跨多个服务器实例的“分片”数据库可以使用SQL数据库实现,但通常是通过san和其他复杂的安排来实现,使硬件充当单个服务器。由于数据库本身不提供这种功能,开发团队承担了跨许多机器部署多个关系数据库的工作。数据自动存储在每个数据库实例中。开发应用程序代码是为了跨所有数据库实例分发数据、分发查询, 并在所以数据库实例中汇总数据结果。必须开发额外的代码来处理资源故障、跨不同数据库执行连接、数据再平衡、复制和其他需求。此外,在使用手动分片时,关系数据库的许多好处(如事务完整性)被破坏或消除。

另一方面,NoSQL数据库通常支持自动分片,这意味着它们会自动地将数据分散到任意数量的服务器上,而不需要应用程序知道服务器池的组成。数据和查询负载在服务器之间自动平衡,当服务器宕机时,可以快速且透明地替换它,而不会造成应用程序中断。

云计算大大简化了这一过程,像亚马逊网络服务(Amazon Web Services)这样的供应商可以根据需要提供几乎无限的容量,并负责所有必要的基础设施管理任务。开发人员不再需要构建复杂、昂贵的平台来支持他们的应用程序,而可以专注于编写应用程序代码。商品服务器可以提供与单个高端服务器相同的处理和存储功能,而价格仅为后者的一小部分。

复制

复杂的NoSQL数据库完全自我修复,提供自动化故障转移和恢复,以及跨多个地理区域分佈数据库的能力,以抵御区域故障并实现数据本地化。与关係数据库不同,NoSQL数据库通常不需要单独的应用程序或昂贵的附件来实现复制。
大多数NoSQL数据库还支持自动数据库复制,以便在停机或计划维护事件发生时保持可用性。更复杂的NoSQL数据库完全是自修复的,提供了自动化的故障转移和恢复,以及跨多个地理区域分布数据库以抵御区域故障和支持数据本地化的能力。与关系数据库不同,NoSQL数据库通常不需要单独的应用程序或昂贵的附加组件来实现复制。

集成缓存

许多产品为SQL数据库系统提供了一个缓存层。这些系统可以极大地提高读性能,但它们不能提高写性能,而且它们增加了系统部署的操作复杂性。如果您的应用程序以读为主,那么可以考虑使用分布式缓存,但是如果您的应用程序只有少量的写容量,那么分布式缓存可能不会提高最终用户的整体体验,并且会增加管理缓存失效的复杂性。

许多NoSQL数据库技术具有出色的集成缓存功能,尽可能将频繁使用的数据保存在系统内存中,并消除了对单独缓存层的需求。一些NoSQL数据库还提供了完全托管的、集成在内存中的数据库管理层,用于处理要求最高吞吐量和最低延迟的工作负载。数据库技术具有出色的集成缓存功能,尽可能将常用数据保留在系统内存中,并且不再需要单独的缓存层。一些NoSQL数据库还为要求最高吞吐量和最低延迟的工作负载提供完全托管的,集成的内存数据库管理层。

NoSQL与SQL的比较

SQL 数据库 NOSQL 数据库
种类 一种类型(SQL数据库),稍有不同 多种不同的类型,包括键值存储、文档数据库、宽列存储和图形数据库
发展历史 在70年代开发处理第一波数据存储应用程序 开发于2000年后期,用于处理SQL数据库的局限性,特别是可伸缩性、多结构化数据、地理分布和敏捷开发冲刺
例子 MySQL,Postgres,Microsoft SQL Server,Oracle数据库 Cloudant, CouchDB, MongoDB, Cassandra, HBase, Neo4j
数据存储模型 个人记录(例如,“员工”)以行形式存储在表中,每一列存储关于该记录的特定数据片段(例如“经理”,“聘用日期”等),非常像电子表格。相关数据存储在单独的表中,然后在执行更复杂的查询时连接在一起。例如,“办公室”可能存储在一张表中,“员工”存储在另一张表中。当用户想要查找员工的工作地址时,数据库引擎将“员工”和“办公室”表一起加入,以获取所有必要的信息。 根据数据库类型的不同而有所不同。例如,键-值存储函数类似于SQL数据库,但是只有两个列(“键”和“值”),有时更复杂的信息作为blob存储在“值”列中。文档数据库完全抛弃了表和行模型,将所有相关数据以JSON、XML或其他格式存储在单个“文档”中,这些格式可以分层嵌套值。
基模 结构和数据类型是预先确定的。要存储关于新数据项的信息,必须更改整个数据库,在此期间数据库必须脱机。 通常是动态的,有一些强制的数据验证规则。应用程序可以随时添加新的字段,与SQL表行不同,可以根据需要将不同的数据存储在一起。对于某些数据库(例如,宽列商店),动态添加新字段更具挑战性。
缩放比例 垂直方式,意味着单一的服务器必须越来越强大,以应付增加的需求。可以将SQL数据库分布在许多服务器上,但通常需要大量额外的工程,而且诸如JOIN,参照完整性和事务等核心关系特性通常会丢失。 水平方式,为了增加容量,数据库管理员可以简单地添加更多的商品服务器或云实例。数据库根据需要自动在服务器之间分发数据。
发展模式 开放源代码(例如Postgres,MySQL)和封闭源代码(例如Oracle数据库) 开源
支持事务 是的,更新可以配置完全或完全不完成 在某些情况下和某些级别(例如,文档级别与数据库级别)
数据操作 使用Select,Insert和Update语句的特定语言,例如选择字段从表WHERE … 通过面向对象的API
统一性 可以进行强大的一致性配置 取决于产品。有些提供了很强的一致性(例如,MongoDB,读取的可调整一致性),而另一些提供最终的一致性(例如Cassandra)。

实现NoSQL数据库

通常,组织会从组织中的NoSQL数据库的小规模试验开始,这使得以一种低风险的方式开发对技术的理解成为可能。大多数NoSQL数据库也是开源的,这意味着它们可以被下载、实现并以很少的成本进行扩展。因为开发周期更快,组织也可以更快地创新,以更低的成本提供更好的客户体验。

在考虑传统基础设施的替代方案时,您可能有几个动机: 扩展或超越现有系统的功能,找出昂贵的专有软件的可行替代方案,或提高开发的速度和敏捷性。

立即注册!

我们的顾客

profile-pic
profile-pic
profile-pic
profile-pic
profile-pic
profile-pic
profile-pic
profile-pic
profile-pic
profile-pic
profile-pic
profile-pic
profile-pic
profile-pic

不确定这是否适合你?

没有问题。请将你的问题和需求发送给我们,我们会将你的建议反馈给您。报价完全免费。
马上获得推荐!
>