点 Redis 8 发布了——而且是开源的

了解更多

文档数据库

利用 NoSQL 文档数据库释放结构化文档的力量

什么是文档数据库?

文档数据库(也称为 NoSQL 文档存储)是一种非关系型数据库,它将数据存储为结构化文档。文档通常存储为 JSON 文件。这是一种以 JSON 格式存储数据的更简单方式,避免了 SQL 中包含多张行列表格的复杂性。文档数据库常用于数据多样且随时间变化的应用场景。由于其能够处理高流量和大量数据,因此在 Web 开发和实时应用中尤其受欢迎。

关系型数据库与文档数据库

关系型数据库和文档数据库代表了数据管理的两种根本不同的方法。以下是更详细的比较

数据结构

关系型数据库使用基于表格的结构,其中数据组织成行和列。每行代表一个记录,每列代表记录的特定字段。结构是严格的,需要一个预定义的模式来概述要存储的数据的结构和类型。这种灵活性允许快速开发和迭代,使文档数据库成为敏捷开发环境中的热门选择。

另一方面,文档数据库使用灵活的、类似 JSON 的格式,其中数据存储在文档中。这些文档能够容纳各种键值对、键数组对,甚至包含嵌套文档。结构灵活,不需要预定义模式。这意味着您可以在同一个数据库中存储不同结构的数据。

数据完整性和一致性

关系型数据库优先考虑数据完整性和一致性。它们使用 ACID(原子性、一致性、隔离性、持久性)事务来确保数据在整个数据库中保持一致。这在数据一致性至关重要的应用程序中尤为重要,例如金融系统。

然而,文档数据库旨在实现灵活性和可扩展性。它们通常使用称为最终一致性的模型,允许在性能和可扩展性得到提高的同时,存在一些临时不一致性。这使得文档数据库非常适合数据需求变化迅速、可扩展性比即时一致性更重要的应用程序。它们通常用于高吞吐量和可用性比严格一致性更重要的场景,例如社交媒体平台、内容管理系统和实时分析。

查询语言

关系型数据库使用 SQL(结构化查询语言)来查询和操作数据。SQL 是一种强大的语言,可以执行复杂的查询和数据操作。

然而,文档数据库需要不同的查询语言,因为记录结构与 SQL 固有的假设不一致。例如,MongoDB 使用一种构建在其 JavaScript 接口中的基于方法的查询语言。亚马逊 DynamoDB 使用一种专有的基于 HTTP 的查询语言。这些查询语言被设计得灵活且易于使用,允许开发人员以符合文档数据库灵活性的方式查询和操作数据。

扩展

关系型数据库通常通过向单个服务器添加更多资源(CPU、RAM、SSD)来进行垂直扩展。这可能会变得昂贵,并且存在限制。

相比之下,文档数据库的设计考虑了横向可扩展性。这意味着您可以通过增加更多服务器来增强数据库的容量。因此,它们非常适合需要管理大量数据或服务海量用户群的应用程序。横向扩展的能力使文档数据库能够有效地管理高流量和大量数据,从而使其成为处理大数据的应用程序的首选。

何时使用文档数据库

非表格数据

当您的应用程序需要管理无法整齐地组织成表格的数据时,文档数据库是一个绝佳的选择。传统关系型数据库旨在处理结构化、表格数据,但它们难以处理半结构化或非结构化数据。另一方面,文档数据库旨在处理各种数据类型,包括复杂的嵌套结构、数组以及其他无法整齐地放入表格的数据类型。这使它们成为在单个数据库中管理各种数据的绝佳选择。

高吞吐量的小型连续读写

如果您的应用程序需要处理高吞吐量的小型连续读写,文档数据库可能是一个不错的选择。这些数据库专为高性能而设计,可以处理大量数据。它们通常还提供内存缓存,可以显著加快对频繁访问数据的访问时间。这使得它们非常适合需要在短时间内处理大量请求的应用程序,例如实时分析或高流量 Web 应用程序。

CRUD 应用程序

文档数据库非常适合需要创建(Create)、读取(Read)、更新(Update)和删除(Delete)(CRUD)操作的应用程序。文档数据库灵活、无模式的特性使其成为数据模型可能随时间演变的应用程序的理想选择。这种灵活性使开发人员可以轻松地向文档添加新字段,而无需更改数据库模式。这使得它们非常适合需求变化迅速的敏捷开发环境。

各种访问模式和数据类型

如果您的应用程序需要在各种访问模式和数据类型下运行,文档数据库可能是一个不错的选择。这些数据库设计灵活,可在各种条件下表现良好。它们可以处理结构化和非结构化数据,并且可以横向扩展以处理大量数据。这使得它们成为需要处理各种数据和多种访问模式的应用程序的绝佳选择,例如内容管理系统或电子商务平台。

快速开发和迭代

文档数据库非常适合需求变化迅速的敏捷开发环境。文档数据库没有固定模式,这使开发人员可以随着应用程序的进展实时修改数据模型,从而无需进行冗长的数据库迁移。这使得开发和迭代速度更快,因此文档数据库成为现代敏捷开发团队的热门选择。

复杂数据结构

如果您的应用程序需要存储复杂的数据结构,例如嵌套对象或数组,文档数据库可能是一个不错的选择。文档数据库以类似 JSON 的格式存储数据,可以自然地表示复杂数据结构。这使得它们非常适合需要处理复杂数据的应用程序,例如社交媒体平台或实时分析应用程序。这使得它们非常适合需要处理大量数据或服务大量用户的应用程序,例如大数据应用程序或高流量 Web 应用程序。

可扩展性

当您的应用程序需要扩展,无论是处理更大容量的数据还是服务不断增长的用户数量时,文档数据库都是一个不错的选择。文档数据库旨在横向扩展,这意味着您可以根据需求增长添加更多服务器来处理更多数据。

多语言持久化

在同一应用程序中针对不同的数据存储需求使用不同的数据存储技术(多语言持久化)的场景中,文档数据库是存储半结构化数据的绝佳选择。这使得数据架构更加灵活和适应性强,从而使文档数据库成为现代复杂应用程序的绝佳选择。

请记住,数据库的选择应始终取决于应用程序的特定需求。文档数据库有很多优点,但它们并非适用于所有情况的最佳选择。在选择数据库时,请务必考虑应用程序的数据访问模式、性能要求和可扩展性需求。

文档数据库用例

内容管理系统(CMS)

文档数据库是内容管理系统的理想选择。这些系统通常需要存储各种内容类型,包括博客文章、用户评论和多媒体内容。文档数据库灵活、无模式的特性使其易于存储和检索这些多样化内容。这种灵活性使 CMS 能够轻松适应不断变化的内容需求,从而使文档数据库成为这些系统的热门选择。

用户资料

管理用户资料的应用程序可以从文档数据库中受益。用户资料通常包含标准属性和自定义属性的组合。使用文档数据库,您可以随着应用程序的演变轻松添加新属性,而无需修改数据库模式。这使得文档数据库非常适合需要处理多样化用户数据的应用程序,例如社交媒体平台或客户关系管理 (CRM) 系统。

电子商务网站

文档数据库非常契合电子商务平台的需求。这类网站必须处理各种数据,包括产品目录、客户资料和交易记录。文档数据库的适应性使得轻松添加或修改产品属性成为可能。因此,它们成为需要管理多样化产品信息和快速波动库存水平的电子商务网站的首选。

使用 JSON 的中间件应用

使用 JSON 进行数据交换的中间件应用程序可以从使用文档数据库中受益。由于文档数据库通常以类似 JSON 的格式存储数据,它们可以存储和检索数据,而无需大量的数据映射或转换。这使得它们非常适合使用 JSON 进行数据交换的现代 Web 应用程序。

RedisJSON

JSON 是 Web 应用程序中交换数据的一种非常流行的格式。Redis Enterprise 提供高速度、大容量的内存中 JSON 文档操作。使用 Redis JSON,您可以原生地以分层树状格式存储文档数据,以高效地扩展和查询文档,与使用 Lua 和核心 Redis 数据结构存储和操作 JSON 相比,性能显著提高。它采用的原生数据类型是 Standard ECMA-404,使用 Standard JSON 数据交换语法。Redis JSON 优于在 Redis 中存储 JSON 对象的任何其他技术,例如使用 Lua 脚本操作 JSON 或 MessagePack 对象。

https://www.youtube.com/embed/2mFakgHKme4

SQL 与面向文档的数据库有什么区别? 加号白色 减号白色

SQL 数据库使用结构化数据模式,将数据存储在表、行和列中,并使用结构化查询语言(SQL)查询数据库。SQL 数据库遵循 ACID(原子性、一致性、隔离性、持久性)合规性以确保数据一致性。面向文档的数据库(也称为文档数据库)将数据存储在文档中——通常是 JSON 格式——并且不需要严格的模式。面向文档的数据库通常有自己特定的查询语言或 API 来查询数据,并且它们通常不符合 ACID。

何时应该使用 NoSQL 数据库? 加号白色 减号白色

当数据灵活性和快速可扩展性至关重要时,NoSQL 数据库(例如面向文档的数据库)是更好的选择。这是因为 NoSQL 数据库在处理非结构化且没有定义模式的数据(内容管理、物联网、分析等)方面表现出色。

面向文档的数据库是关系型数据库的一种吗? 加号白色 减号白色

不是,面向文档的数据库不是关系型数据库的一种。它们被认为是 NoSQL(非关系型)数据库,因为它们不以表、行和列等关系型结构存储数据。

使用面向文档的数据库有哪些优势? 加号白色 减号白色

使用面向文档的数据库的最大优势是数据灵活性(每个文档可以有不同的结构)、可扩展性(擅长横向扩展)和强大的查询能力(无需复杂的 SQL 即可实现高级搜索和聚合)。

面向文档的数据库中索引的最佳实践是什么? 加号白色 减号白色

仅索引重要的字段。例如那些用于频繁查询、过滤和排序的字段,以提高读取性能和写入效率。对常见的查询模式使用复合索引,选择正确的索引类型(文本、地理空间、向量),并定期监控性能,以随着数据增长保持索引精简和有效。

面向文档的数据库如何处理模式更改? 加号白色 减号白色

面向文档的数据库通常是无模式的。这意味着它们不像关系型数据库那样需要或强制执行严格的模式,并且每个文档可以有不同的结构。但是,如果发生了重大的模式更改,引入或更改了索引字段(您想要搜索的字段),则需要创建或更新索引。
此外,在面向文档的数据库中对模式进行版本控制是最佳实践,以便随着时间的推移轻松管理存储或查询的数据结构的变化。

面向文档的数据库如何处理数据一致性和事务? 加号白色 减号白色

面向文档的数据库通过可配置的写入关注来处理一致性,允许用户选择强一致性或最终一致性。一些使用基于法定人数的写入来确保持久性,而现代实现支持多文档 ACID 事务,用于需要严格一致性的操作。

Redis Enterprise 如何在实际应用中用作面向文档的数据库? 加号白色 减号白色

由于 Redis 能够将数据存储为 JSON 文档,创建索引,以及实时搜索/查询数据,Redis 可以用作文档数据库。
Redis 常见的面向文档的数据库用例包括存储会话和用户资料数据、来自各种传感器和连接设备的物联网数据,以及将产品目录数据存储为 JSON 文档。

对于大型数据集,Redis Enterprise 如何确保面向文档的数据库具有高性能和可扩展性? 加号白色 减号白色

Redis 通过将数据存储在 RAM 中来确保高性能,即使在极高的吞吐量下,也能实现亚毫秒级的读写延迟。Redis 的分片能力(即将数据集分割成更小的部分,称为“分片”)可以实现跨多台机器或容器的高效横向扩展,从而提高性能。集群功能处理分布在多个节点上的分片数据。

Redis Enterprise 如何处理文档存储,并且面向文档的用例支持哪些数据结构? 加号白色 减号白色

Redis 支持多种数据类型,使其适用于面向文档的用例。主要是,Redis 的 JSON 和哈希数据类型适用于面向文档的数据库用例,因为它们允许数据以分层树状格式存储。Redis 还支持字符串、列表、集合和有序集合,这些也可以支持面向文档的数据库用例。

下一节  ►  时间序列数据库