文档数据库是一种 NoSQL 数据库,可用于将数据作为类 JSON 的文档存储和查询。JavaScript 对象表示法(JSON)是一种人类和计算器均可读的开放数据交换格式。开发人员可以在代码中使用 JSON 文档并将其直接保存到文档数据库中。文档和文档数据库的灵活、半结构化和层级性质允许它们随应用程序的需求而变化。

JSON 文档数据库
JSON 文档数据库查询

文档数据库的优点

文档数据库支持灵活的索引、强大的临时查询和文档集合分析。阅读有关以下各项优势的更多信息。

易于开发

JSON 文档映射到对象,这是大多数编程语言中的常见数据类型。在构建应用程序时,开发人员可以灵活地直接从代码中创建和更新文档。这意味着他们可以减少在事先创建数据模型上花费的时间。这就使得应用程序开发更加快速和高效。

灵活的架构

面向文档的数据库允许您在同一个集合中创建多个具有不同字段的文档。在存储电子邮件或社交媒体帖子等非结构化数据时,这可能很方便。但是,某些文档数据库提供了架构验证,因此您可以对结构施加一些限制。

扩展时的性能

文档数据库提供内置的分发功能。您可以在不影响性能的情况下在多台服务器上横向扩展它们,这也十分具有成本效益。此外,文档数据库通过内置复制功能提供容错能力和可用性。

文档数据库的使用案例

该文档模型适用于内容管理、目录、传感器管理等使用案例。对于每个使用案例,每个文档都是唯一的,并且会随着时间的推移而演变。

内容管理

文档数据库是内容管理应用程序(例如博客和视频平台)的绝佳选择。通过文档数据库,应用程序跟踪的每个实体都可以存储为单个文档。文档数据库是开发人员在需求变化时更新应用程序的一种更直观的方式。此外,如果数据模型需要更改,则只需要更新受影响的文档。不需要更新架构,也不需要对数据库停机时间进行更改。

目录

文档数据库在存储目录信息方面高效且有效。例如,在电子商务应用程序中,不同的产品通常具有不同数量的属性。在关系数据库中管理数千个属性效率较低,并且阅读性能会受到影响。使用文档数据库,可以在单个文档中描述每个产品的属性,以方便管理和加快阅读速度。更改一个产品的属性不会影响其他产品。

传感器管理

物联网(IoT)促使各组织定期从传感器和仪表等智能设备收集数据。传感器数据通常以连续的变量值流的形式出现。由于延迟问题,某些数据对象可能不完整、重复或丢失。此外,您必须先收集大量数据,然后才能对其进行筛选或汇总以供分析。

在这种情况下,文档存储更加方便。您可以按原样快速存储传感器数据,而无需对其进行清理或使其符合预先确定的架构。您也可以根据需要对其进行扩展,并在分析完成后删除整个文档。

文档数据库的工作原理

文档数据库以 JSON 格式的键值对存储数据。您可以通过编程方式读取 JSON 文档并将其写入数据库。

JSON 文档结构

JSON 以三种方式表示数据:

键值

键值对记录在大括号内。键是一个字符串,值可以是任何数据类型,如整数、十进制或布尔值。例如,{"year": 2013} 就是一个简单的键值。

数组

数组是在左方括号([)和右方括号(])内定义的值的有序集合。数组中的项以逗号分隔。例如,{"fruit": ["apple","mango"]}。

对象

对象是键值对的集合。从本质上来说,JSON 文档允许开发人员嵌入对象和创建嵌套对。例如,{"address": {"country": "USA","state": "Texas"}}。

JSON 文档示例

在以下示例中,类似 JSON 的文档描述了一个电影数据集。

[
    {
        "year" : 2013,
        "title" : "Turn It Down, Or Else!",
        "info" : {
            "directors" : [ "Alice Smith", "Bob Jones"],
            "release_date" : "2013-01-18T00:00:00Z",
            "rating" : 6.2,
            "genres" : ["Comedy", "Drama"],
            "image_url" : "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg",
            "plot" : "A rock band plays their music at high volumes, annoying the neighbors.",
            "actors" : ["David Matthewman", "Jonathan G. Neff"]
        }
    },
    {
        "year": 2015,
        "title": "The Big New Movie",
        "info": {
            "plot": "Nothing happens at all.",
            "rating": 0
        }
    }
]

您可以观察到,JSON 文档可以非常灵活地保存简单的值、数组和对象。您甚至可以有一个包含 JSON 对象的数组。因此,面向文档的数据库允许您为嵌入式 JSON 对象创建无限级别的层次结构。您想为文档存储提供什么架构完全由您决定。

文档数据库操作

您可以创建、读取、更新和删除存储在数据库中的整个文档。文档数据库提供了一种查询语言或 API,允许开发人员运行以下操作:

创建

可以在数据库中创建文档。每个文档都有一个用作密钥的唯一标识符。

读取

您可以使用 API 或查询语言来读取文档数据。您可以使用字段值或键来运行查询。您还可以向数据库添加索引以提高读取性能。

更新

您可以灵活地更新现有文档。您可以重写整个文档或更新单个值。

文档数据库和键值存储之间的区别

键值数据库是一种 NoSQL 数据库,使用简单的键值方法来存储数据。该数据库将数据存储为键值对集合,其中键作为唯一标识符。键和值都可以是从简单对象到复杂复合对象的任何内容。

面向文档的数据库是一种特殊类型的键值存储,其中键只能是字符串。此外,该文档使用 JSON 等标准或 XML 等相关语言进行编码。您也可以将 PDF、图像文件或文本文档直接存储为值。

在查询您的文档存储时,您可以读取整个值或值的一部分,尤其是在该值是另一个 JSON 对象时。例如,您可以有 {"book": {"id": 1,"price": $10}},然后查询 book.price,数据库将返回值 10。键值数据库将始终返回带有 ID 和价格信息的整个值。

AWS 如何满足您的文档数据库需求

Amazon DocumentDB(与 MongoDB 兼容)是一项完全托管的原生 JSON 文档数据库服务,支持包括 MongoDB 在内的文档工作负载。开发人员可以使用相同的 MongoDB 应用程序代码、驱动程序和工具来运行、管理和扩展 Amazon DocumentDB 上的工作负载。您可以获得更高的性能、可扩展性和可用性,而无需担心底层基础设施的管理。借助 Amazon DocumentDB,您可以:

  • 使用 Amazon DocumentDB 弹性集群扩展到每秒数百万次读取和写入请求,对性能几乎或完全没有影响,对底层基础设施的管理也不会产生任何影响。
  • 将存储和计算分离,因此您可以通过多达 15 个共享相同底层存储的只读副本来提高读取性能,而不必在副本节点上执行写入。
  • 无需支付许可费,即可自动执行无差别的手动数据库管理任务,包括硬件配置、修补、设置等。
  • 通过 Amazon DocumentDB 全球集群实现 99.99% 的高可用性,适用于支持快速本地读取性能的全球分布式应用程序。 
  • 通过自动复制、连续备份和严格的网络隔离实现 99.99% 的可用性。
  • 高度可靠和耐用,具有容错和自我修复能力的存储、时间点故障恢复、连续备份等功能。Amazon DocumentDB 通过六种方式复制新写入,使您的数据在一个区域内的三个可用区中持久保存,而您只需支付一份副本的费用。
  • 高度安全,具有默认静态加密、网络隔离和高级审核功能,同时还能够通过细粒度访问控制资源级权限。
  • 广泛的合规覆盖范围,包括 SOC(1、2 和 3)、PCI DSS、符合 HIPAA 要求等。

立即创建免费账户,开始在 AWS 上使用文档数据库!

使用 Amazon DocumentDB 进行数据建模
Amazon DocumentDB 弹性集群简介