在 Azure Cosmos DB 中选择 API

适用对象: NoSQL MongoDB Cassandra Gremlin

Azure Cosmos DB 是一种用于新式应用开发的完全托管的 NoSQL 关系数据库和向量数据库。 Azure Cosmos DB 提供自动管理、更新和修补,使你无需进行数据库管理。 它还通过经济高效的无服务器和自动缩放选项处理容量管理,这些选项可响应应用程序的需求,使容量与需求相匹配。

Azure Cosmos DB 中的 API

Azure Cosmos DB 提供多种数据库 API,其中包括 NoSQL、MongoDB、Cassandra、Gremlin 和表。 借助这些 API,可以使用文档、键-值、图和列系列数据模型来为真实数据建模。 应用程序可以通过这些 API 将 Azure Cosmos DB 视为如同其他各种数据库技术一样,并消除管理和缩放方法所产生的开销。 Azure Cosmos DB 可帮助你使用已有的生态系统、工具和技能,通过其各种 API 进行数据建模和查询。

所有 API 都提供存储和吞吐量的自动缩放、灵活性及性能保证。 不存在最好的 API,你可以选择任一 API 来生成应用程序。 本文将帮助你根据工作负载和团队要求选择 API。

选择 API 时的注意事项

适用于 NoSQL 的API 是 Azure Cosmos DB 的本机 API。

MongoDB、Cassandra、Gremlin 和表 API 实现开源数据库引擎的线路协议。 如果满足以下条件,则这些 API 最适用:

  • 如果你已有 MongoDB 或 Gremlin 应用程序
  • 如果你不想重写整个数据访问层
  • 如果你要为数据库使用开源开发人员生态系统、客户端驱动程序、专业知识和资源
  • 若要使用 Azure Cosmos DB 核心功能,例如:
    • 多区域分布
    • 弹性缩放存储和吞吐量
    • 大规模高性能
    • 低延迟
    • 能够运行事务和分析工作负载
    • 完全托管平台
  • 如果你要在多云环境中开发新式应用

可以使用这些 API 生成新应用程序,或迁移现有数据。 若要运行迁移的应用,请更改应用程序的连接字符串,然后像往常一样继续运行即可。 迁移现有应用时,请确保评估这些 API 的功能支持。

必须根据工作负载选择符合你的要求的 API。 下图显示的流程图说明了在生成新应用或将现有应用迁移到 Azure Cosmos DB 时如何选择适当的 API:

在 Azure Cosmos DB 中选择 API 的决策树示意图。

在 Azure Cosmos DB 中选择 API 的决策树示意图。 该图的一半说明了有多少现有开源数据库工作负载可以使用适用于 Azure Cosmos DB 的相应 API。 该图的另一半说明了新应用程序如何使用 API for NoSQL,或者将现有技能与开源数据库的 API 结合使用。

适用于 NoSQL 的API

适用于 NoSQL 的 Azure Cosmos DB API 以文档格式存储数据。 它提供最佳的端到端体验,因为我们可以完全控制接口、服务和 SDK 客户端库。 为 Azure Cosmos DB 推出的任何新功能都会首先在适用于 NoSQL 的API 帐户中提供。 NoSQL 帐户支持使用结构化查询语言 (SQL) 语法来查询项,该语法是查询 JSON 对象的最熟悉和最常用的查询语言之一。 若要了解详细信息,请参阅 适用于 NoSQL 的 Azure Cosmos DB API 训练模块和 SQL 查询入门一文。

如果要从 Oracle、DynamoDB、HBase 等其他数据库迁移,并且要使用新式技术生成应用,建议使用适用于 NoSQL 的API。 适用于 NoSQL 的API支持分析,并在操作工作负载与分析工作负载之间提供性能隔离。

适用于 MongoDB 的 API

适用于 MongoDB 的 Azure Cosmos DB API通过 BSON 格式将数据存储在文档结构中。 它与 MongoDB 有线协议兼容;但是,它不使用任何本机 MongoDB 相关代码。 如果想使用更广泛的 MongoDB 生态系统和技能,而不影响使用 Azure Cosmos DB 功能,则建议使用适用于 MongoDB 的 API。

Azure Cosmos DB 提供的不受影响的功能包括:

  • 扩展
  • 高可用性
  • 异地复制
  • 多个写入位置
  • 自动和透明的分片管理
  • 操作存储和分析存储之间的透明副本

只需更改连接字符串,即可通过适用于 MongoDB 的 API 使用现有的 MongoDB 应用。 你可以使用本机 MongoDB 工具(例如 mongodump 和 mongorestore)或使用 Azure 数据库迁移工具迁移任何现有数据。 MongoDB shell、MongoDB CompassRobo3T 等工具可以像在本机 MongoDB 中那样运行查询和处理数据。 有关详细信息,请参阅适用于 MongoDB 的 API 一文。

API for Apache Cassandra

适用于 Cassandra 的 Azure Cosmos DB API将数据存储在面向列的架构中。 Apache Cassandra 提供高度分布式的水平缩放方法来存储大量数据,并针对面向列的架构提供灵活的方法。 Azure Cosmos DB 中的适用于 Cassandra 的 API 与这种接近分布式 NoSQL 数据库的理念一致。 此适用于 Cassandra 的 API 是与本机 Apache Cassandra 兼容的有线协议。 如果你希望利用 Azure Cosmos DB 的弹性和完全托管功能,并且仍使用 Apache Cassandra 的大部分本机功能、工具和生态系统,则应考虑使用适用于 Cassandra 的 API。 这种完全托管的特性意味着在 适用于 Cassandra 的 API 上,你无需管理 OS、Java VM、垃圾回收器、读/写性能、节点、群集等。

可以使用 Apache Cassandra 客户端驱动程序连接到适用于 Cassandra 的 API。 借助适用于 Cassandra 的 API,可以使用 Cassandra 查询语言 (CQL) 和你已经熟悉的 CQL shell、Cassandra 客户端驱动程序等工具与数据进行交互。 适用于 Cassandra 的 API 目前仅支持 OLTP 场景。 使用 适用于 Cassandra 的 API,还可以使用 Azure Cosmos DB 的独特功能,如更改源。 有关详细信息,请参阅 适用于 Cassandra 的 API 一文。 如果你已经熟悉 Apache Cassandra,但不熟悉 Azure Cosmos DB,请参阅如何适应 适用于 Cassandra 的 API 了解详细信息。

适用于 Apache Gremlin 的 API

通过适用于Gremlin 的 Azure Cosmos DB API,用户可以发出图查询并将数据存储为边和顶点。

将适用于 Gremlin 的 API用于以下场景:

  • 涉及动态数据
  • 涉及具有复杂关系的数据
  • 涉及过于复杂而无法通过关系数据库进行建模的数据
  • 如果想使用现有 Gremlin 生态系统和技能

适用于 Gremlin 的 API 将图形数据库算法的强大功能与高度可缩放的托管基础结构相结合。 此 API 针对缺乏灵活性和关系方法相关的最常见数据问题提供独特且灵活的解决方案。 适用于 Gremlin 的 API 目前仅支持 OLTP 场景。

适用于 Gremlin 的 API 基于 Apache TinkerPop 图形计算框架。 适用于 Gremlin 的 API 使用同一图形查询语言来引入和查询数据。 它使用 Azure Cosmos DB 的分区策略从图形数据库引擎执行读/写操作。 适用于 Gremlin 的 API 具有对开源 Gremlin 的线路协议支持,因此你可以使用开源 Gremlin SDK 来生成应用程序。 适用于 Gremlin 的 API 还可与 Apache Spark 和 GraphFrames 配合使用,用于复杂的分析图情况。 有关详细信息,请参阅 API for Gremlin 一文。

适用于表的 API

适用于表的 Azure Cosmos DB API 以键/值格式存储数据。 如果你当前正在使用 Azure 表存储,可能会发现在延迟、缩放、吞吐量、多区域分布、索引管理方面存在一些限制、查询性能低。 适用于表的 API 克服了这些限制,如果你要利用 Azure Cosmos DB 的功能,建议迁移应用。 适用于表的 API 仅支持 OLTP 场景。

为 Azure 表存储编写的应用程序只需更改少量代码便可迁移到适用于表的 API ,并可充分利用高级功能。 有关详细信息,请参阅 适用于表的 API 一文。

迁移数据时的容量规划

正在尝试进行容量规划,以便从现有数据库群集迁移到适用于 NoSQL 或 MongoDB 的 Azure Cosmos DB? 可以使用有关现有数据库群集的信息进行容量规划。

  • 有关估算请求单元的详细信息,如果只知道现有分片和复制数据库群集中 vCore 和服务器的数量,请参阅使用 vCore 或 vCPU 估算请求单位
  • 有关估算请求单元的详细信息,如果知道当前数据库工作负载的典型请求速率,请参阅适用于 API for NoSQLAPI for MongoDB 的容量规划器