文档数据库是一种 NoSQL 数据库,以灵活的“文档”形式存储数据,这些文档通常采用 JSON 或 BSON 等格式。
文档数据库以以下特点而闻名:
将文档数据库视为一个智能数字文件柜。数据按集合(文件夹)分组,每个集合均包含单个实体(如客户或产品)的自包含文档(文件)。
与严格关系表不同,每个文档都可以有独特的结构。例如,您可以在电子商务目录中为单个商品添加“sustainability_rating”字段,而无需更改其他所有商品的架构。
文档 1: { "id": 1, "product_name": "blue shirt", "product_category": "shirt", "qty": 76, "sustainability_rating": "moderate" } | 文档 2: { "id": 2, "product_name": "green pants", "product_category": "pants", "qty": 44 } |
文档 1:
{
"id": 1,
"product_name": "blue shirt",
"product_category": "shirt",
"qty": 76,
"sustainability_rating": "moderate"
}
文档 2:
{
"id": 2,
"product_name": "green pants",
"product_category": "pants",
"qty": 44
}
文档数据库非常适合需要灵活性、可伸缩性和快速开发的应用,例如 AI 应用、内容管理、电子商务和游戏。
例如,一条社交媒体帖子包含半结构化数据,例如用户名、时间戳和“赞”数等可预测字段,但结构是灵活的。一篇帖子可能包含可选的地点标签,而另一篇帖子可能包含标记的用户列表。此外,帖子可能包含非结构化数据,例如图片或视频、自由格式的说明文字以及一系列用户评论。
文档数据库旨在将所有相关信息(从结构化的用户名到非结构化的图片和评论)存储在一个连贯的“文档”中。这样,开发者就可以非常高效地处理真实数据,而无需先将数据强制放入预定义的严格结构中。
文档数据库凭借一系列独特架构特性脱颖而出,这些特性旨在支持现代开发模式和数据效率。
文档会分组到集合中,类似于关系型数据库中的表。不过,与表不同的是,集合不要求所有文档都具有相同的结构,因此更加灵活。例如,假设有多个文档存储了客户的姓名和邮箱,但付款方式不同。一个文档可能存储信用卡详细信息,而另一个文档可能存储支票账户的汇款路线号码和账号。
除了每个文档都有自己的独特结构外,格式还可能随着信息的添加而发生变化。换句话说,数据的结构可能会发生变化,而不仅仅是值。这与关系型数据库有着根本的区别,在关系型数据库中,表中的所有行都必须符合相同的预定义列,只有值会发生变化。动态架构在氛围编程中尤其强大,因为表达新业务需求的单个提示可能会反映对数据模型的更改。
文档数据库支持直接在文档字段中查询,并使用索引来支持快速查询。例如,您可以按邮件快速查找用户,或检索价格高于特定金额的订单。
文档数据库旨在通过无缝添加更多服务器或集群来轻松扩容,几乎不会停机。此可伸缩性使它们非常适合数据需求不断增长或不可预测的应用。
文档数据库广泛应用于那些对灵活性、可伸缩性和速度要求极高的应用。以下是一些常见应用场景:
文档数据库、关系型数据库和键值存储区都用于管理数据,但它们在结构、灵活性和速度方面的侧重点不同。
功能 | 文档数据库 | 键值存储区 | 关系型数据库 |
数据格式 | 丰富、结构化的文档 | 简单的键值对 | 表格(行和列) |
灵活性 | 高;每个文档可能各不相同 | 高;列数可能因行而异 | 有限;预定义架构 |
查询 | 高级,包括嵌套字段 | 通过主键或辅助索引获得最佳性能 | 使用 JOIN 的高级复杂查询 |
适用场景 | 快速开发和不断发展的数据模型 | 简单的数据结构和快速查找 | 高度一致的数据和跨多个表的查询 |
功能
文档数据库
键值存储区
关系型数据库
数据格式
丰富、结构化的文档
简单的键值对
表格(行和列)
灵活性
高;每个文档可能各不相同
高;列数可能因行而异
有限;预定义架构
查询
高级,包括嵌套字段
通过主键或辅助索引获得最佳性能
使用 JOIN 的高级复杂查询
适用场景
快速开发和不断发展的数据模型
简单的数据结构和快速查找
高度一致的数据和跨多个表的查询
文档数据库在动态环境中表现出色,例如电子商务平台或移动应用,这些环境中的数据会快速演变或呈现多种形式。它们的灵活性适合来自不同来源或具有不同架构的数据集。
另一方面,关系型数据库非常适合传统应用,例如财务系统或库存管理,在这些应用中,一致性和结构是不可或缺的。例如,在金融服务领域,维护严格的架构可确保每个客户账号都使用治理所需的相同数据类型。
选择这两种方法时需要考虑的因素:
大型复杂应用(如视频游戏)可能基于文档数据库和关系型数据库构建,每个数据库存储不同部分的数据。
文档数据库和键值存储区都是 NoSQL 数据库,但它们根据处理数据的方式服务于不同的目的。
文档数据库:文档数据库扩展了键值概念。文档可以包含嵌套数据,文档数据库可以更灵活地为此数据编制索引,以便对嵌套数据的值执行高性能查询。此结构使文档数据库能够管理各种数据集并支持高级查询。
键值存储区:这些数据库使用简单的键值结构。每个键都是唯一的,并直接指向其值。这种简单性使得键值存储区在查找方面非常快速,但由于不使用复杂的查询语言,因此不适合处理复杂数据或分层数据。
适用情形:
文档数据库是处理现代数据需求的强大工具。以下是一些主要优势:
灵活性
由于文档数据库具有动态架构,因此对于数据模型频繁更改的应用,文档数据库非常有用。
性能
内置索引编制和高效的数据访问权限模式使文档数据库处理速度很快,即使处理大型或复杂的数据集也是如此。
可伸缩性
通过横向扩缩,您可以随着数据量的增长添加更多服务器,确保不断增长的应用保持一致的性能。文档数据库还可以通过为每个节点增加计算能力来实现纵向扩缩。
开发者体验
您可以使用开发者熟悉的语法将 JSON 文档映射到数据库中的对象。直接在代码内更新文档。
数据多功能性
文档数据库擅长存储、管理和查询各种数据类型,包括非结构化和半结构化信息,以及与图片和视频等文件关联的元数据。
MongoDB 是一种广泛使用的文档数据库,以其灵活的 BSON 数据格式、临时查询语言和横向扩缩能力而闻名。MongoDB, Inc. 以商业产品的形式提供此数据库。其他供应商的几个竞争数据库也提供不同程度的 MongoDB 兼容性。
Firestore 是一种全托管式企业级文档数据库,可提供高达 99.999% 的可用性和符合 ACID 标准的多文档事务。借助与 MongoDB 兼容的 Firestore,您可以将现有的 MongoDB 应用代码、驱动程序、工具以及 MongoDB 集成的开源生态系统与 Firestore 搭配使用。Firestore 通过与 Firebase 集成,简化了 Web 应用和移动应用的实时数据同步。
Couchbase 是一个分布式文档数据库和云平台,可为多云、移动、AI 和边缘计算工作负载提供支持。
CosmosDB 是一种多模型数据库服务,专为需要在全球范围内实现低延迟读写操作的应用而设计。
Amazon DocumentDB 是一项 Amazon Web Services (AWS) 托管式数据库服务。
Firestore 是一种全托管式文档数据库,可降低数据库管理的复杂性。它让您能够充分利用 Google Cloud 及其全球可扩缩平台的强大功能。
无论您是构建小型应用还是扩缩全球平台,Firestore 的功能都能帮助您更快地行动,同时保持灵活性和性能。
作为 Google Cloud 和 Firebase 的一部分,Firestore 可通过与 Firebase Auth、BigQuery 和许多其他服务的简单集成,为您的应用提供支持。从实时协作工具到移动应用和企业平台,Firestore 提供了您成功所需的一切工具。
立即开始使用,低用量用户可使用免费层级,体验强大、可靠且可扩缩的文档数据库带来的优势。