Azure Cosmos DB Rust SDK
Azure Cosmos DB Rust SDK
Azure Cosmos DB NoSQL API 的客户端库 —— 一款全球分布、多模型的数据库。
安装
cargo add azure_data_cosmos azure_identity环境变量
COSMOS_ENDPOINT=https://<account>.documents.azure.com:443/
COSMOS_DATABASE=mydb
COSMOS_CONTAINER=mycontainer身份验证
use azure_identity::DeveloperToolsCredential;
use azure_data_cosmos::CosmosClient;
let credential = DeveloperToolsCredential::new(None)?;
let client = CosmosClient::new(
"https://<account>.documents.azure.com:443/",
credential.clone(),
None,
)?;
客户端层级
| 客户端 | 用途 | 获取方式 |
|--------|---------|----------|
| CosmosClient | 账户级操作 | 直接实例化 |
| DatabaseClient | 数据库操作 | client.database_client() |
| ContainerClient | 容器/项目操作 | database.container_client() |
核心工作流
获取数据库和容器客户端
let database = client.database_client("myDatabase");
let container = database.container_client("myContainer");创建项目
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Item {
pub id: String,
pub partition_key: String,
pub value: String,
}
let item = Item {
id: "1".into(),
partition_key: "partition1".into(),
value: "hello".into(),
};
container.create_item("partition1", item, None).await?;
读取项目
let response = container.read_item("partition1", "1", None).await?;
let item: Item = response.into_model()?;替换项目
let mut item: Item = container.read_item("partition1", "1", None).await?.into_model()?;
item.value = "updated".into();
container.replace_item("partition1", "1", item, None).await?;
补丁更新项目 (Patch)
use azure_data_cosmos::models::PatchDocument;
let patch = PatchDocument::default()
.with_add("/newField", "newValue")?
.with_remove("/oldField")?;
container.patch_item("partition1", "1", patch, None).await?;
删除项目
container.delete_item("partition1", "1", None).await?;密钥认证 (可选)
通过 feature flag 启用基于密钥的身份验证:
cargo add azure_data_cosmos --features key_auth最佳实践
1. 始终指定分区键 —— 点读和写入操作必须提供。
2. 使用 into_model()? —— 将响应反序列化为自定义类型。
3. 派生 Serialize 和 Deserialize —— 为所有文档类型实现这两个 trait。
4. 优先使用 Entra ID 认证 —— 推荐使用 DeveloperToolsCredential 而非密钥认证。
5. 复用客户端实例 —— 客户端是线程安全的且可复用。
参考链接
| 资源 | 链接 |
|----------|------|
| API 参考 | https://docs.rs/azure_data_cosmos |
| 源代码 | https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/cosmos/azure_data_cosmos |
| crates.io | https://crates.io/crates/azure_data_cosmos |
适用场景
本技能适用于执行概览中所描述的工作流或操作。局限性
- 仅在任务明确符合上述范围时使用此技能。
- 不要将输出结果视为针对特定环境的验证、测试或专家评审的替代方案。
- 如有不明确之处,请停止并寻求澄清。