NoSQL,也称为“Not Only SQL”、“non-SQL”,是一种数据库设计方法,支持在关系数据库中发现的传统结构之外存储和查询数据。 虽然它仍可以存储关系数据库管理系统 (RDBMS) 中找到的数据,但与 RDBMS 相比,其存储方式有所不同。 该使用关系数据库还是非关系数据库,这在很大程度上取决于上下文,并且因具体用例而异。
与关系数据库典型的表格结构不同的是,NoSQL 数据库将数据存储在一个数据结构中,例如 JSON 文档。 由于这种非关系数据库设计不需要某种模式,它提供了快速可扩展性,可管理通常非结构化的大型数据集。
NoSQL 也属于分布式数据库,这意味着会复制信息,并将其存储在远程或本地的各种服务器上。 这确保了数据的可用性和可靠性。 如果部分数据脱机,数据库的其余部分仍可以继续运行。
如今,公司需要以超快的速度管理大量数据,并能够迅速扩展,进而可在各行各业中运行现代 Web 应用。 在这个云、大数据、移动和 Web 应用飞速增长的时代,NoSQL 数据库提供了这种速度和可扩展性,并因为其高性能和易用性而广受欢迎。
说起 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 数据库的最简单的形式。 这个无模式数据模型被组织成一个包含键值对的字典,其中每一项都有一个键和一个值。 键可以类似于 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 数据库都各有其优势,因而也更适合特定的用例。 尽管如此,它们都为开发人员带来了以下优势,并创建了相应的框架,从而为客户提供更完善的服务,具体包括:
简而言之,NoSQL 数据库提供了高性能、高可用性和高可扩展性。
选定的 NoSQL 数据库的结构和类型,具体取决于您的组织计划使用该数据库的方式。 以下是各种类型 NoSQL 数据库的一些具体用途。
大型企业需要无延迟提供服务,且能够更快扩展,这一需求刺激了微服务的增长,促使企业开始审视不同应用所要使用的数据库类型。
很多公司都已发现,对应用的每个组件使用单个关系数据库自有其局限性,当特定组件存在更好的替代方案时尤为如此。微服务是一种很有吸引力的选择,这一部分是因为它们避免了对整个应用使用单个共享数据存储的需求。 取而代之的是,应用具有许多松散耦合且可独立部署的服务,每个服务都有各自的数据模型和数据库,并通过 API 网关或 iPaaS 集成在一起。
在单个应用中使用多个数据库的模式,也称为混合持久性,这为 NoSQL 数据库在市场上的蓬勃发展创造了一定的空间。 如今,开发人员可以利用适当的数据库来提供合适的微服务,而不必试图在单个关系数据库环境中运行一切。