Azure Cosmos DB:全球 NoSQL
探索 Cosmos DB 的多模型、多区域架构,了解分区键,并根据应用程序需求选择合适的一致性级别。
Azure Cosmos DB:全球 NoSQL 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
什么是 Azure Cosmos DB
Azure Cosmos DB是 Microsoft 的全球分布式多模型 NoSQL 数据库服务。它旨在让您在全球任何位置、任何规模下,都能获得个位数毫秒级的读写延迟。传统数据库通常受限于单个区域,而 Cosmos DB 可以同时将数据透明地复制到数十个 Azure 区域。
多模型 API 支持
Cosmos DB 通过单一服务支持多个数据库 API。您可以使用原生的 NoSQL API(JSON 文档)、面向基于 MongoDB 驱动程序构建的应用程序的 MongoDB API、面向宽列工作负载的 Apache Cassandra API、面向图数据的 Gremlin API,以及面向键值数据的 Table API。每个 API 都通过熟悉的接口提供对 Cosmos DB 底层引擎的访问。
帐户、数据库与容器
Cosmos DB 的资源层次结构包含三个级别。帐户是顶级资源,用于定义复制区域列表和一致性级别。在帐户内,您可以创建作为逻辑命名空间的数据库。在每个数据库内,您可以创建容器;容器用于存放 Items(文档),也是预配吞吐量的单位。
# Create a Cosmos DB account with the NoSQL API
az cosmosdb create \
--name mycosmosaccount \
--resource-group myRG \
--kind GlobalDocumentDB \
--locations regionName=eastus failoverPriority=0 isZoneRedundant=true
# Create a database
az cosmosdb sql database create \
--account-name mycosmosaccount \
--resource-group myRG \
--name myDatabase分区键:扩展的基础
分区键是每个 Item 上的一个属性,Cosmos DB 使用它将数据分布到物理分区中。选择正确的分区键至关重要:它应具有高基数(包含许多不同的值)、均匀分散写入流量,并出现在大多数查询中。分区键选择不当会导致热点分区,从而限制吞吐量并降低性能。
// Example container with /userId as partition key
// Items in the container:
{
'id': 'order-001',
'userId': 'user-42',
'product': 'Widget',
'total': 29.99
}
// userId distributes orders across partitions吞吐量:RU/s 模型
Cosmos DB 按每秒请求单位(RU/s)对吞吐量收费。1 RU 大致相当于按 ID 读取一个 1 KB 文档的成本。写入、查询和删除所需的 RU 数量会根据 Item 大小和索引复杂度增加。您可以在容器级别预配 RU/s,也可以在数据库中的所有容器之间共享资源池,还可以切换到自动缩放模式,让 Cosmos DB 自动调整吞吐量。
# Create a container with 400 RU/s
az cosmosdb sql container create \
--account-name mycosmosaccount \
--resource-group myRG \
--database-name myDatabase \
--name orders \
--partition-key-path '/userId' \
--throughput 400全球分布
Cosmos DB 最强大的功能是只需几次点击即可在全球范围内复制数据。您可以向帐户添加区域,Cosmos DB 会自动在每个区域之间同步所有写入操作。在多写入(多主)配置中,每个区域都可以同时提供读取和写入服务,从而降低地理位置分散的用户的延迟。
# Add a second region to the Cosmos DB account
az cosmosdb update \
--name mycosmosaccount \
--resource-group myRG \
--locations regionName=eastus failoverPriority=0 \
regionName=westeurope failoverPriority=1五种一致性级别
Cosmos DB 提供五种可调一致性级别,从强到弱依次为:强一致性(可线性化读取,延迟最高)、有界陈旧性(读取相对于写入的滞后时间处于有界窗口内)、会话一致性(默认级别——在会话中对您自己的写入提供一致读取)、一致前缀(读取不会看到顺序错乱的写入)以及最终一致性(读取速度最快,保证最弱)。请根据应用程序对陈旧数据的容忍程度进行选择。
自动索引
默认情况下,Cosmos DB 会自动为您插入的每个 Item 中的每个属性建立索引,无需您预先定义架构。这样可以支持灵活的即席查询,而无需维护索引。您可以自定义索引策略,排除从不查询的路径(从而降低存储成本),或为跨多个属性的 ORDER BY 查询添加复合索引。
// Custom indexing policy example
{
'indexingMode': 'consistent',
'includedPaths': [{ 'path': '/*' }],
'excludedPaths': [
{ 'path': '/largeTextBlob/?' },
{ 'path': '/_etag/?' }
]
}面向事件驱动应用的更改源
更改源是 Cosmos DB 容器中所有创建和更新操作的有序日志。应用程序可以订阅更改源,以触发下游处理,例如更新搜索索引、发送通知或写入物化视图。更改源是 Cosmos DB 架构中事件驱动模式和 CQRS 模式的基础。
用于过期数据的生存时间(TTL)
Cosmos DB 支持生存时间(TTL)功能。您可以在容器或单个 Item 上设置此属性,使系统在指定的秒数后自动删除它们。这非常适合会话数据、缓存条目、具有法规保留期限的审核日志,或任何具有明确过期时间的数据。TTL 删除作为后台任务执行,不会消耗预配的 RU/s。
// Enable TTL on a container (TTL in seconds)
az cosmosdb sql container update \
--account-name mycosmosaccount \
--resource-group myRG \
--database-name myDatabase \
--name sessions \
--ttl 3600定价与无服务器层级
Cosmos DB 提供两种计费模式。预配吞吐量会按照 RU/s 小时计费,无论实际使用量如何,适合稳定且可预测的工作负载。无服务器模式按照消耗的 RU 和存储的 GB 计费,且没有最低费用,因此对于开发、原型设计和流量峰值场景来说非常经济高效。无服务器 Cosmos DB 目前仅限于单个区域。
快速检查
测试您对本课中 Microsoft Azure 基础知识(AZ-900)概念的理解。
课程回顾
本课中,您学习了:Cosmos DB 是一种全球分布式多模型 NoSQL 服务、分区键决定数据的分片方式,因此必须谨慎选择,以及五种一致性级别可帮助您平衡延迟与数据新鲜度。接下来,我们将学习 Azure 针对开源数据库引擎提供的托管服务。
常见问题解答
「Azure Cosmos DB:全球 NoSQL」课时是免费的吗?
是的 — 「Azure Cosmos DB:全球 NoSQL」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「Azure Cosmos DB:全球 NoSQL」这节课中我会学到什么?
探索 Cosmos DB 的多模型、多区域架构,了解分区键,并根据应用程序需求选择合适的一致性级别。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Azure Cosmos DB:全球 NoSQL」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Azure SQL Database
- Azure Cosmos DB:全球 NoSQL
- Azure 开源数据库引擎
- 将数据库迁移到 Azure