什么是 NoSQL 数据库?
了解 NoSQL - 一种比传统数据库更灵活的数据库设计
桌子上蓝色的线圈
什么是 NoSQL 数据库?

NoSQL,也称为“Not Only SQL”、“non-SQL”,是一种数据库设计方法,支持在关系数据库中发现的传统结构之外存储和查询数据。 虽然它仍可以存储关系数据库管理系统 (RDBMS) 中找到的数据,但与 RDBMS 相比,其存储方式有所不同。 该使用关系数据库还是非关系数据库,这在很大程度上取决于上下文,并且因具体用例而异。

与关系数据库典型的表格结构不同的是,NoSQL 数据库将数据存储在一个数据结构中,例如 JSON 文档。 由于这种非关系数据库设计不需要某种模式,它提供了快速可扩展性,可管理通常非结构化的大型数据集。 

NoSQL 也属于分布式数据库,这意味着会复制信息,并将其存储在远程或本地的各种服务器上。 这确保了数据的可用性和可靠性。 如果部分数据脱机,数据库的其余部分仍可以继续运行。  

如今,公司需要以超快的速度管理大量数据,并能够迅速扩展,进而可在各行各业中运行现代 Web 应用。 在这个云、大数据、移动和 Web 应用飞速增长的时代,NoSQL 数据库提供了这种速度和可扩展性,并因为其高性能和易用性而广受欢迎。 

NoSQL 与 SQL

说起 NoSQL,人们通常也会提及结构化查询语言 (SQL)。 为了更好地理解 NoSQL 和 SQL 之间的区别,了解 SQL 的历史可能会有所帮助。SQL 是一种用于从数据库中检索特定信息的编程语言。  

在关系数据库出现之前,对于数据表,很多公司都使用具有树状结构的分层数据库系统。 通过这些早期的数据库管理系统 (DBMS),用户能够整理大量数据。 然而,这些系统比较复杂,通常是特定应用所专有的,并且它们在数据中的展示方式上也受到限制。 这些局限性最终导致人们开发了关系数据库管理系统,后者以表格形式来排列数据。 SQL 提供了一个与关系数据交互的接口,支持分析师通过合并公共字段来连接多个表。

随着时间的流逝,对于电子商务应用等新兴技术来说,更迅速、更多元化地使用大型数据集这些要求变得愈发重要。 程序员需要比 SQL 数据库(即关系数据库)更为灵活的数据库。 NoSQL 因而成为了另一种选择。 

虽然 NoSQL 为 SQL 提供了一种替代方案,但这种进步绝不会就此将 SQL 数据库取而代之。 例如,假设您在一家公司管理零售订单。 在关系模型中,各个表将分别管理客户数据、订单数据和产品数据,它们将通过唯一的公用键(如客户 ID或订单 ID)连接在一起。 虽然这对于快速存储和检索数据非常有用,但却需要大量内存。 当您想要添加更多内存时,SQL 数据库只能垂直扩展,而不能水平扩展,这意味着您所拥有的硬件限制了您添加更多内存的能力。 结果就会导致垂直扩展最终限制了公司的数据存储和检索能力。

相比之下,NoSQL 数据库是非关系型数据库,它避免了连接各个表的需求。它们内置的分片和高可用性功能简化了水平扩展过程。 如果单个数据库服务器不足以存储所有数据或处理所有查询,那么可以在两个或更多服务器之间划分工作负载,从而使公司能够水平扩展数据。

虽然不同类型的数据库各有各的优势,但公司通常会在单个应用中同时使用 NoSQL 数据库和关系数据库。 如今的云提供商可以支持 SQL 或 NoSQL数据库。 到底该选择哪个数据库,具体取决于您的目标。 

要深入了解这两种选择之间的区别,请参阅“SQL 与 NoSQL 数据库:有何区别?

NoSQL 数据库的类型

NoSQL 还为以多种方式组织数据提供了其他选项。 通过提供多样化的数据结构,NoSQL 可以应用于数据分析,管理大数据、社交网络和移动应用开发。 

NoSQL 数据库使用以下任一主要数据模型来管理信息: 

键值存储

这通常被认为是 NoSQL 数据库的最简单的形式。 这个无模式数据模型被组织成一个包含键值对的字典,其中每一项都有一个键和一个值。  键可以类似于 SQL 数据库中找到的内容,例如购物车 ID,而值则是一个数据数组,例如该用户购物车中的每个单独项目。 它通常用于缓存和存储用户会话信息,例如购物车。 然而,在一次需要提取多个记录时,这并不理想。 Redis 和 Memcached 是开源键值数据库的示例。

文档存储

顾名思义,文档数据库会将数据存储为文档。 它们有助于管理半结构化的数据,这些数据通常以 JSON、XML 或 BSON 格式进行存储。 在应用中使用数据时,这会将数据保存在一起,减少了使用数据所需的转换量。 开发人员还获得了更多的灵活性,因为不需要跨文档匹配数据模式(例如,name 与 first_name)。 然而,对于复杂的事务,这可能有点问题,最终会导致数据损坏。 常见的文档数据库用例包括内容管理系统和用户配置文件。 面向文档的数据库的一个例子就是 MongoDB,这是 MEAN 堆栈的数据库组件。

想要了解有关 MongoBD 的更多信息? 请参阅 IBM 关于如何开始使用 IBM Cloud Databases for MongoDB 的教程。 

宽列存储

这些数据库将信息存储在列中,支持用户只访问所需的特定列,而无需为无关数据分配额外的内存。 这种数据库试图弥补键值存储和文档存储的不足,但由于它可能是一个更难以管理的复杂系统,因此不建议较新的团队和项目使用。 Apache HBase 和 Apache Cassandra 都是开源宽列数据库的例子。 Apache HBase 基于 Hadoop Distributed Files System 构建而成,它为存储稀疏数据集提供了一种方式,在众多大数据应用中广泛使用。另一方面,Apache Cassandra 旨在管理跨多个服务器的大量数据和跨多个数据中心的集群。 它已被用于各种用例,如社交网络网站和实时数据分析。

图形存储

这种类型的数据库通常包含来自知识图谱的数据。 数据元素以节点、边和属性形式进行存储。 任何对象、场所或人员都可以是节点。 边定义了节点之间的关系。 例如,节点可以是客户(如 IBM)和代理机构(如 Ogilvy)。 边会将这种关系归类为 IBM 和 Ogilvy 之间的客户关系。

图形数据库用于存储和管理图形内不同元素之间的连接网络。 Neo4j(链接位于 IBM 外部)是一种基于 Java 的图形数据库服务,提供了开源社区版本,用户可以在此为联机备份和高可用性扩展购买许可,也可以购买包含了备份和扩展的预打包许可版本。 

内存存储

使用这种类型的数据库,如 IBM solidDB,数据会驻留在主内存而不是磁盘上,这与基于磁盘的传统数据库相比,数据访问速度更快。 

NoSQL 数据库示例

许多公司都已涉足 NoSQL 领域。 除了上面提到的这些数据库,还有一些流行的 NoSQL 数据库: 

  • Apache CouchDB,这是一种基于 JSON 文档的开源数据库,它使用 JavaScript 作为其查询语言。 
  • Elasticsearch,这是一种基于文档的数据库,包含全文搜索引擎。 
  • Couchbase,这是一种键值和文档数据库,支持开发人员为云、移动和边缘计算构建响应迅速且灵活多变的应用。 

要了解有关数据库现状的更多信息,请参阅“数据库环境概述

NoSQL 的优势

每种类型的 NoSQL 数据库都各有其优势,因而也更适合特定的用例。 尽管如此,它们都为开发人员带来了以下优势,并创建了相应的框架,从而为客户提供更完善的服务,具体包括: 

  • 成本效益:高端商用 RDBMS 的维护价格不菲。 要想实现垂直扩展,就需要购买许可,需要训练有素的数据库管理人员和强大的硬件。NoSQL 数据库支持您快速水平扩展,更恰当地分配资源,进而最小化成本。 
  • 灵活性: 水平扩展和灵活的数据模型,也意味着 NoSQL 数据库能够处理大量快速变化的数据,这使它们非常适合敏捷开发、快速迭代和频繁的代码推送。 
  • 复制:NoSQL 复制功能可跨多个服务器复制和存储数据。 这种复制提供了数据可靠性,确保了宕机期间的数据访问,并可在服务器脱机时防止数据丢失。 
  • 高速度:从开发人员到销售团队再到客户,所有用户都可以使用 NoSQL 更迅速、更敏捷地存储和处理数据。 这一速度也使 NoSQL 数据库通常更适合现代复杂的 Web 应用、电子商务网站或移动应用。  

简而言之,NoSQL 数据库提供了高性能、高可用性和高可扩展性。 

NoSQL 用例

选定的 NoSQL 数据库的结构和类型,具体取决于您的组织计划使用该数据库的方式。 以下是各种类型 NoSQL 数据库的一些具体用途。 

  • 管理数据关系:管理数据的复杂聚合和这些点之间的关系,通常会使用基于图形的 NoSQL 数据库来处理。 这包括推荐引擎、知识图谱、欺诈检测应用和社交网络,在这里会使用各种数据类型在人们之间建立联系。 
  • 低延迟性能:游戏、家庭健身应用和广告技术都需要高吞吐量来实时管理数据。  这种基础架构为消费者创造了最大的价值,无论是提供市场投标最新资讯还是返回最相关的广告。Web 应用需要使用内存中 NoSQL 数据库来提供快速响应时间,并管理使用高峰,而不会出现磁盘存储所带来的延迟。 
  • 扩展和庞大数据量:电子商务应有能力管理很高的使用峰值,无论是处理单日销售额还是节假日购物季。键值数据库由于其简单的结构可在流量繁忙期间轻松扩展,因此经常用于电子商务应用。  这种敏捷性对于游戏、广告技术和物联网 (IoT) 应用有着很大的价值。 
微服务和 NoSQL 数据库

大型企业需要无延迟提供服务,且能够更快扩展,这一需求刺激了微服务的增长,促使企业开始审视不同应用所要使用的数据库类型。 

很多公司都已发现,对应用的每个组件使用单个关系数据库自有其局限性,当特定组件存在更好的替代方案时尤为如此。微服务是一种很有吸引力的选择,这一部分是因为它们避免了对整个应用使用单个共享数据存储的需求。 取而代之的是,应用具有许多松散耦合且可独立部署的服务,每个服务都有各自的数据模型和数据库,并通过 API 网关或 iPaaS 集成在一起。 

在单个应用中使用多个数据库的模式,也称为混合持久性,这为 NoSQL 数据库在市场上的蓬勃发展创造了一定的空间。 如今,开发人员可以利用适当的数据库来提供合适的微服务,而不必试图在单个关系数据库环境中运行一切。 

IBM 解决方案
了解可供使用的数据库类型

探索在重构为微服务方法的情况下,尝试确定最佳数据库选项时要考虑的不同因素。

了解有关微服务数据库的更多信息
IBM® 微服务

了解微服务(或微服务架构),这是一种云原生架构方法,在单个应用中包含众多松散耦合而且可单独部署的小型组件或服务。

了解微服务的价值
资源 SQL 与 NoSQL 数据库:有何区别?

探索 SQL 和 NoSQL 数据库之间的关键差异,并了解各种用例最适合使用的数据库类型。

在现代零售环境中使用 NoSQL 数据库来管理信息

了解如何加快向网上购物的转变进程。

采取下一步行动

如今,许多应用都是以服务形式提供的,这些服务必须全天候可用,可以从各种设备访问,并且可以扩展到可能高达数百万用户的规模。 IBM Cloudant 是为 Web、移动、IoT 和无服务器应用而优化的可扩展 JSON 文档数据库。 该服务与开源生态系统兼容,这一生态系统包含 Apache CouchDB、PouchDB 以及用于最热门 Web 和移动开发堆栈的库。

立即试用 IBM Cloudant