Skip to content
返回云服务

Azure Cosmos DB

全球分布式多模型 NoSQL 数据库,99 百分位延迟为个位数毫秒,提供五种明确定义的一致性级别。

Azure高级

为什么

Cosmos DB 是 Azure 唯一提供开箱即用多主复制并有 SLA 保障延迟、吞吐、一致性和可用性的数据库。它支持 SQL、MongoDB、Cassandra、Gremlin 和 Table API,可迁移现有应用而无需更换驱动。Azure holds 21% cloud market share (Synergy Research Q4 2024)。

Azure 是拥有 Microsoft 365 / Active Directory 资产的企业的默认选择 — 95% 的财富 500 强使用 Azure。AKS 和 Cosmos DB 对 .NET 工作负载是一等公民。

何时使用

适用于全球分布式应用(各地都需低延迟读写)、高写入量 IoT 遥测,或需要 MongoDB/Cassandra API 兼容但不想管理集群时。重度分析场景应改用 Synapse Link 或 BigQuery,因为全表扫描的 RU 成本过高。

如何做

1. 创建 Cosmos 账户并选择 API(SQL/Mongo/Cassandra/Gremlin/Table)。 2. 创建数据库和一个或多个容器,每个容器指定分区键。 3. 预配吞吐:手动(RU/s)或自动缩放,在数据库或容器级别。 4. 添加区域实现多主;选择一致性级别(Session 是默认最佳点)。 5. 用 SDK 通过终结点和密钥(或托管标识)连接。 6. 用 SQL 或 API 原生语法查询;监控 RU 消耗。 ```bash az cosmosdb create --name mycosmos --resource-group rg --kind GlobalDocumentDB az cosmosdb sql database create --account-name mycosmos --name mydb --resource-group rg az cosmosdb sql container create --account-name mycosmos --database-name mydb --name items --partition-key-path "/userId" --throughput 400 ```

示例

用 SQL API 创建项并查询,按 /userId 分区: ```ts import { CosmosClient } from "@azure/cosmos"; const client = new CosmosClient(process.env.COSMOS_CONN!); const container = client.database("mydb").container("items"); await container.items.create({ id: "1", userId: "u42", title: "买牛奶", done: false }); const { resources } = await container.items .query("SELECT * FROM c WHERE c.userId=@u AND c.done=false") .fetchAll({ parameters: [{ name: "@u", value: "u42" }] }); console.log(resources); ```

常见问题

  • ⚠RequestRateTooLarge (429) 错误 —— RU/s 对负载太低;启用自动缩放或提高吞吐,并批量/批量插入以摊销 RU 成本。
  • ⚠热分区 —— 所有写入命中同一分区键值(如时间戳桶);选择高基数分区键使写入均匀分布。
  • ⚠跨分区查询慢且昂贵 —— 查询未包含分区键;始终按分区键过滤以保持单分区查询。

最佳实践

  • ✓选择高基数且写入均匀的分区键;分区键决定数据分片方式且创建后不可变。
  • ✓可变负载使用自动缩放吞吐 —— 自动在最大值的 10%–100% 间调整 RU/s,避免 429 且不过度付费。
  • ✓启用 Synapse Link(分析存储)在列存副本上运行分析查询,不消耗事务 RU。

常见问题解答

什么是Azure Cosmos DB?它解决什么问题?

全球分布式多模型 NoSQL 数据库,99 百分位延迟为个位数毫秒,提供五种明确定义的一致性级别。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。

如何在 5 分钟内上手Azure Cosmos DB?

两步即可跑通:① 创建 Cosmos 账户并选择 API(SQL/Mongo/Cassandra/Gremlin/Table)。;② 创建数据库和一个或多个容器,每个容器指定分区键。。建议先用免费套餐验证流程,再接入生产环境。

Azure Cosmos DB 最容易踩的坑是什么?

最高频的问题是:RequestRateTooLarge (429) 错误 —— RU/s 对负载太低;启用自动缩放或提高吞吐,并批量/批量插入以摊销 RU 成本。。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。

Azure Cosmos DB 的最佳实践有哪些?

Azure Cosmos DB 的最佳实践包括:选择高基数且写入均匀的分区键;分区键决定数据分片方式且创建后不可变。;可变负载使用自动缩放吞吐 —— 自动在最大值的 10%–100% 间调整 RU/s,避免 429 且不过度付费。;启用 Synapse Link(分析存储)在列存副本上运行分析查询,不消耗事务 RU。。其中首条「选择高基数且写入均匀的分区键;分区键决定数据分片方式且创建后不可变。」应作为团队默认规范写入 IaC 模板。

Azure Cosmos DB 如何控制成本与避免账单意外?

三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。Azure Cosmos DB 多数提供免费套餐,先在免费额度内验证再放量。