什么是文档数据库?

文档数据库是一种 NoSQL 数据库,以灵活的格式存储、管理和检索数据。这些“文档”可以各自拥有独特的结构,这与使用包含行和列的严格表的关系型数据库不同。

此灵活性使文档数据库成为处理半结构化或非结构化数据的理想选择,例如 AI 生成的应用或传感器数据,在这些情况下,传统架构会过于严格。它们在内容管理、电子商务和实时分析等应用场景中尤其受欢迎。

要点总结

文档数据库是一种 NoSQL 数据库,以灵活的类似 JSON 的“文档”形式存储数据。

文档数据库以以下特点而闻名:

  • 灵活的数据模型:每个文档都可以有独特的结构,这种设计对开发者友好,可将对象直接映射到代码
  • 横向可伸缩性:文档数据库旨在进行横向扩容,可轻松扩容以应对增长
  • 丰富的查询:强大的查询语言支持复杂的过滤、排序和数据汇总
  • 应用场景多样:文档数据库非常适合非结构化或半结构化数据,应用场景广泛,例如内容管理系统、用户个人资料、健康记录和电子商务产品目录

文档数据库的工作原理

将文档数据库视为一个智能数字文件柜。数据按集合(文件夹)分组,每个集合均包含单个实体(如客户或产品)的自包含文档(文件)。

与严格关系表不同,每个文档都可以有独特的结构。例如,您可以在电子商务目录中为单个商品添加“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 应用、内容管理、电子商务和实时分析。

例如,一条社交媒体帖子包含半结构化数据,例如用户名、时间戳和“赞”数等可预测字段,但结构是灵活的。一篇帖子可能包含可选的地点标签,而另一篇帖子可能包含标记的用户列表。此外,帖子可能包含非结构化数据,例如图片或视频、自由格式的说明文字以及一系列用户评论。

文档数据库旨在将所有相关信息(从结构化的用户名到非结构化的图片和评论)存储在一个连贯的“文档”中。这样,开发者就可以非常高效地处理真实数据,而无需先将数据强制放入预定义的严格结构中。

文档数据库的主要特性

文档数据库凭借一系列独特架构特性脱颖而出,这些特性旨在支持现代开发模式和数据效率。

文档会分组到集合中,类似于关系型数据库中的表。不过,与表不同的是,集合不要求所有文档都具有相同的结构,因此更加灵活。例如,假设有多个文档存储了客户的姓名和邮箱,但付款方式不同。一个文档可能存储信用卡详细信息,而另一个文档可能存储支票账户的汇款路线号码和账号。

除了每个文档都有自己的独特结构外,格式还可能随着信息的添加而发生变化。换句话说,数据的结构可能会发生变化,而不仅仅是值。这与关系型数据库有着根本的区别,在关系型数据库中,表中的所有行都必须符合相同的预定义列,只有值会发生变化。动态架构在氛围编程中尤其强大,因为表达新业务需求的单个提示可能会反映对数据模型的更改。

文档数据库支持直接在文档字段中查询,并使用索引来支持快速查询。例如,您可以按邮件快速查找用户,或检索价格高于特定金额的订单。

文档数据库旨在通过无缝添加更多服务器或集群来轻松扩容,几乎不会停机。此可伸缩性使它们非常适合数据需求不断增长或不可预测的应用。

文档数据库的主要应用场景

文档数据库广泛应用于那些对灵活性、可伸缩性和速度要求极高的应用。以下是一些常见应用场景:

  • 内容管理系统 (CMS):管理各种内容(从博文到产品说明),确保高效地交付和更新内容
  • 电子商务平台:为高性能网店提供支持,处理复杂的商品清单、用户账号和实时事务
  • 实时分析:处理和分析大量数据,以获得有价值的分析洞见并做出数据驱动型决策
  • 移动应用和 Web 应用:构建快速响应的应用,在各种设备上提供顺畅的用户体验
  • 物联网 (IoT):存储和分析大量传感器数据,为智能设备和系统提供支持
  • 游戏开发:管理玩家数据、游戏状态和排行榜,打造沉浸式游戏体验
  • 医疗保健应用:安全地存储和管理敏感的患者信息,实现高效、准确的医疗保健服务
  • AI 赋能的应用:使用可快速演进并跟上不断变化的 AI 提示的数据模型来支持 AI
  • AI 缓存:缓存 AI 服务生成的语言翻译、数据分类等结果,以降低服务费用

比较文档数据库、键值数据库和关系型数据库

文档数据库、关系型数据库和键值存储区都用于管理数据,但它们在结构、灵活性和速度方面的侧重点不同。

功能

文档数据库

键值存储区

关系型数据库

数据格式

丰富、结构化的文档

简单的键值对

表格(行和列)

灵活性

高;每个文档可能各不相同

高;列数可能因行而异

有限;预定义架构

查询

高级,包括嵌套字段

通过主键或辅助索引获得最佳性能

使用 JOIN 的高级复杂查询

适用场景

快速开发和不断发展的数据模型

简单的数据结构和快速查找

高度一致的数据和跨多个表的查询

功能

文档数据库

键值存储区

关系型数据库

数据格式

丰富、结构化的文档

简单的键值对

表格(行和列)

灵活性

高;每个文档可能各不相同

高;列数可能因行而异

有限;预定义架构

查询

高级,包括嵌套字段

通过主键或辅助索引获得最佳性能

使用 JOIN 的高级复杂查询

适用场景

快速开发和不断发展的数据模型

简单的数据结构和快速查找

高度一致的数据和跨多个表的查询

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

文档数据库在动态环境中表现出色,例如电子商务平台或移动应用,这些环境中的数据会快速演变或呈现多种形式。它们的灵活性适合来自不同来源或具有不同架构的数据集。

另一方面,关系型数据库非常适合传统应用,例如财务系统或库存管理,在这些应用中,一致性和结构是不可或缺的。例如,在金融服务领域,维护严格的架构可确保每个客户账号都使用治理所需的相同数据类型。

选择这两种方法时需要考虑的因素

  • 结构:关系型数据库强制执行严格的架构,而文档数据库允许每条记录均具有独特的结构
  • 关系:关系型数据库依靠 JOIN 操作来连接表,而文档数据库通常将相关数据嵌入到单个文档中,以便更快地访问
  • 可伸缩性:关系型数据库更易于纵向扩缩,即向单个服务器添加更多资源,但横向扩缩需要复杂的机制。文档数据库专为跨多个服务器的横向扩缩而构建
  • 灵活性:文档数据库可以轻松适应不断变化的数据模型,而关系型数据库则需要花费大量精力来修改架构

大型复杂应用(如视频游戏)可能基于文档数据库和关系型数据库构建,每个数据库存储不同部分的数据。

文档数据库与键值存储区

文档数据库和键值存储区都是 NoSQL 数据库,但它们根据处理数据的方式服务于不同的目的。

文档数据库:文档数据库扩展了键值概念。文档可以包含嵌套数据,文档数据库可以更灵活地为此数据编制索引,以便对嵌套数据的值执行高性能查询。此结构使文档数据库能够管理各种数据集并支持高级查询。

键值存储区:这些数据库使用简单的键值结构。每个键都是唯一的,并直接指向其值。这种简单性使得键值存储区在查找方面非常快速,但由于不使用复杂的查询语言,因此不适合处理复杂数据或分层数据。

适用情形

  • 选择键值存储区,用于管理用户会话或缓存等简单数据结构,快速查找至关重要
  • 为具有复杂、不断演变的数据结构的应用选择文档数据库,例如管理产品目录或用户个人资料

文档数据库常见问题解答

Firestore 是 Google Cloud 提供的一款全托管式无服务器文档数据库。它允许您将数据存储在灵活的文档中,并与其他 Google Cloud 服务无缝集成,从而提供强大且可扩缩的解决方案。

不同之处在于结构和灵活性。Cloud SQLCloud Spanner 等 SQL 数据库使用具有行和列的严格表。文档数据库(如 Firestore)以灵活的、类似 JSON 的文档存储数据,允许结构演变,而不会破坏架构。

使用文档数据库的优势

文档数据库是处理现代数据需求的强大工具。以下是一些主要优势:

灵活性

由于文档数据库具有动态架构,因此对于数据模型频繁更改的应用,文档数据库非常有用。

Performance

内置索引编制和高效的数据访问权限模式使文档数据库处理速度很快,即使处理大型或复杂的数据集也是如此。

可伸缩性

通过横向扩缩,您可以随着数据量的增长添加更多服务器,确保不断增长的应用保持一致的性能。文档数据库还可以通过为每个节点增加计算能力来实现纵向扩缩。

开发者体验

您可以使用开发者熟悉的语法将 JSON 文档映射到数据库中的对象。直接在代码内更新文档。

数据多功能性

文档数据库擅长存储、管理和查询各种数据类型,包括非结构化和半结构化信息,以及与图片和视频等文件关联的元数据。

选择 Firestore 来满足您的文档数据库需求

Firestore 是一种全托管式文档数据库,可降低数据库管理的复杂性。它让您能够充分利用 Google Cloud 及其全球可扩缩平台的强大功能。

无论您是构建小型应用还是扩缩全球平台,Firestore 的功能都能帮助您更快地行动,同时保持灵活性和性能。

  • 无服务器架构:Firestore 是无服务器的,意味着无需设置或管理基础设施。它会自动扩缩,以处理您的数据负载,从零到数百万个并发连接。
  • Google Cloud 服务集成:轻松与其他 Google Cloud 服务(如 Cloud FunctionsCloud RunBigQuery)连接。这样,无需进行复杂的配置,即可实现强大的数据处理和分析流水线。
  • MongoDB 兼容性:使用 MongoDB 驱动程序、工具和代码直接连接到 Firestore。这使得迁移现有应用或使用熟悉的模式启动新项目变得非常简单。
  • 实时更新:通过直接内置于平台的实时数据同步功能,让用户随时掌握最新动态。
  • 全球可伸缩性:Firestore 能够进行横向扩缩,同时确保全球用户都能以低延迟访问,让您轻松应对业务增长。
  • 对开发者友好:专注于创建创新功能,无需担心基础设施或维护问题。Firestore 的全托管式服务可处理繁重的工作。
  • 低用量免费层级:Firestore 提供慷慨的免费层级,非常适合希望随着业务增长而扩缩且无需前期费用的初创公司或小型项目。

作为 Google Cloud 和 Firebase 的一部分,Firestore 可通过与 Firebase Auth、BigQuery 和许多其他服务的简单集成,为您的应用提供支持。从实时协作工具到移动应用和企业平台,Firestore 提供了您成功所需的一切工具。

立即开始使用,低用量用户可使用免费层级,体验强大、可靠且可扩缩的文档数据库带来的优势。

利用 Google Cloud 解决业务难题

新客户可获得 $300 赠金,用于抵扣 Google Cloud 的费用。

其他资源

  • 什么是关系型数据库?:学习关系型数据库的基础知识,包括如何以行和列的形式结构化数据,以及何时使用关系型数据库来实现强一致性
  • 什么是 NoSQL 数据库?探索不同类型的 NoSQL 数据库(例如键值存储区、文档存储和宽列存储),并了解它们如何处理非结构化数据
  • Firestore 使用入门:按照本指南设置您的第一个 Firestore 数据库,添加数据,并开始在 Google Cloud 上构建可扩缩的应用

更进一步

获享 $300 赠金以及 20 多种提供“始终免费”用量的产品,开始在 Google Cloud 上构建项目。