介绍 Azure Cosmos DB

已完成

你的开发团队具有处理非关系数据存储的经验。 你希望借助此经验来扩展云原生解决方案的功能,以包括处理和存储智能设备生成的 IoT 遥测数据的功能。 了解 Azure 托管的 NoSQL 产品/服务后,你决定使用 Azure Cosmos DB。 以下信息可以帮助确认其是否适合作为遥测数据的持久数据存储。

什么是 Cosmos DB?

Azure Cosmos DB 是完全托管的云原生 NoSQL 数据库。 它是 Azure 基础服务之一,这意味着它可在每个 Azure 区域中使用。

作为托管服务,Azure Cosmos DB 消除了大多数传统数据库管理任务,例如基础数据库引擎的更新或修补。 它提供自动且即时的可伸缩性,并为其性能和响应性提供由服务级别协议 (SLA) 支持的保证。 它还提供一组复原功能,可将它与关系数据库进行区别。 这些功能包括具有多区域写入的全球分布式副本,以及能够实现五个不同的一致性模型(从非常一致性到最终一致性)。

Azure Cosmos DB 的另一个独有特征是支持多个数据库 API。 预配 Azure Cosmos DB 时,可以从原生 Core (NoSQL) API、适用于 MongoDB 的 API、Cassandra API、Gremlin API 和表 API 中选择首选开发平台。 使用 Azure Cosmos DB for NoSQL API 时,可以灵活地选择首选开发平台,例如 .NET SDK、Java SDK、Node.js 或 Python。

与关系数据库相比,Cosmos DB 有哪些优势?

关系数据库系统的一个常见特征是使用锁定,这可保证其事务行为。 这些保证可帮助确保在每个数据库中实现强大的数据一致性。 虽然在许多情况下都需要这种一致性,但是它会对并发、延迟和可用性产生负面影响。 可以通过将数据库拆分为多个分片来缓解这些负面影响,但是此方法的实现和维护十分复杂。

Azure Cosmos DB 通过将对不同一致性模型、内置复制和多区域写入的支持与可配置的冲突解决机制相结合,来解决这些缺点。 在不需要强大一致性的情况下,该支持可提供显著的性能和复原优势。 同时,如果需要这种一致性,Cosmos DB 还支持服务器端事务。

Cosmos DB 资源模型是什么?

若要实现 Azure Cosmos DB,需要先在 Azure 订阅中创建 Azure Cosmos DB 帐户。 该帐户用作分发和高可用性单位。 可以选择将帐户配置为跨多个区域进行复制,并且使每个副本都可写入。 还可以为帐户配置默认一致性级别。

使用 SQL API、适用于 MongoDB 的 API 或 Gremlin API 时,帐户可以包含一个或多个数据库,其中每个数据库都托管一个或多个容器。 容器是可伸缩性单位,使你可以指定计算和存储资源来处理其内容。 如果存在 SQL API 或适用于 MongoDB 的 API,则该内容采用 JSON 格式文档(称为项)的格式,而没有任何特定的架构定义约束。 默认情况下,Azure Cosmos DB 会自动为容器中的所有项编制索引,而无需显式索引或架构管理,但提供了自定义索引行为的选项。

可用于处理数据库或单个集合内数据的资源数取决于可用的请求单位 (RU) 数。 RU 数基于指定的数据库或容器配置。 Cosmos DB 提供三种模式来确定 RU 分配(具体取决于你的偏好)。

  • 预配吞吐量模式。 在此模式下,指定特定数量的 RU 以反映预期使用模式。 此方法可最清楚地说明生成的性能和成本。
  • 自动缩放模式。 在此模式下,会预先分配你认为足以满足基线要求的 RU 数,但如果对数据访问的需求较高,则允许其自动增加。 此模式最适合具有可变或不可预测使用模式的任务关键型工作负载。
  • 无服务器模式。 在此模式下,无需预分配 RU。 而是依赖于 Azure Cosmos DB 的自动缩放功能来增加或减少处理资源量。 如果工作负载可以容忍数据库处于非活动状态后的临时延迟,则从成本角度来看,这种模式可能是有益的。

Cosmos DB 在 Azure IoT 方案中有哪些优点和用例?

Azure Cosmos DB 提供许多使其适用于 IoT 方案的功能,包括:

  • 分区。 Azure Cosmos DB 使用指定的逻辑分区键自动对容器进行分区。 分区是 Azure Cosmos DB 的可伸缩性和复原能力背后的核心机制。 通过选择分区键,可以适应需要存储和处理大量设备和遥测数据的 IoT 方案。

    备注

    逻辑分区的大小不能超过 20 GB。

  • 生存时间 (TTL)。 借助 TTL,Azure Cosmos DB 可以在指定的时间段后自动删除项。 这种自动化可简化数据生命周期管理并降低成本,因为基于 TTL 的删除不会计入 RU 使用量。

  • 更改源。 Azure Cosmos DB 使用更改源在集合项发生更改后自动触发操作。 这种自动触发器简化了实现常见 IoT 设计模式(即依赖数据更改来触发相应的操作)的过程。

  • 针对性能和复原能力的服务级别协议 (SLA)。 在涉及大量流式处理数据的 IoT 方案中,客户可以期望 99% 的读取和写入的延迟小于 10 毫秒,并且多区域写入的可用性为 99.999%。

  • 无架构数据库。 通过消除基于架构的约束,Azure Cosmos DB 可将由不同设备模型生成的各种类型的遥测数据存储在同一集合中。

  • 自动编制索引。 Azure Cosmos DB 索引支持有助于在包含已注册设备库存及其遥测的大量数据中快速灵活地进行查找。

Azure Cosmos DB 适用于两个主要 IoT 用例:

  • 它将存储设备遥测数据,这有助于快速访问遥测数据,以便进行可视化、后期处理和分析。
  • 它将存储设备目录,这适用于对 IoT 设备、实体及其拓扑进行建模(每个设备由一个项表示)。