📜  Microsoft Azure – 在 Cosmos DB 中选择分区键(1)

📅  最后修改于: 2023-12-03 15:02:56.790000             🧑  作者: Mango

Microsoft Azure - 在 Cosmos DB 中选择分区键

什么是 Cosmos DB?

Cosmos DB 是一种用于开发高度可扩展、多模型、全局分发的 NoSQL 数据库服务。它允许您按照需要扩展应用程序,而不必考虑容量、吞吐量或地理位置。即使是增长最快的应用程序也可以轻松处理大量数据,无论是分散在不同地理位置还是集中在同一个位置。

什么是分区键?

在 NoSQL 数据库中,分区键是用于确定如何将数据分发到不同分区的属性。选择正确的分区键可以显著提高查询效率和并发性能。

如何选择分区键?

选择分区键是一个关键的决策,并且通常需要在数据库最初设计时考虑,因此需要考虑以下几个因素:

  • 数据模型:根据数据模型中的实体和关系,选择一个属性作为分区键,例如用户 ID、地理位置或时间戳。
  • 查询模式:选择最常见的查询模式,以确保查询遵循分区键,并且查询不会跨多个分区执行。
  • 数据变更模式:选择分区键以确保分区大小相等,避免分区不平衡,这可能导致性能下降。
如何在 Cosmos DB 中选择分区键?

在 Cosmos DB 中,您可以选择自定义分区键或使用系统分区键。系统分区键是由 Cosmos DB 自动生成的属性。例如,如果您的数据模型使用用户 ID 来查询数据,则可以将其设置为自定义分区键。如果您的数据访问模式不涉及任何特定属性,则可以使用系统分区键,例如 /_partitionKey。

以下是使用 Azure 资源管理器 Azure PowerShell 创建折扣数据库并将分区键设置为自定义属性 "userId":

$accountName = "your-cosmos-account"
$rgName = "your-rg"
$location = "eastus"

$cosmosDbProperties = @{
    "accountName" = $accountName;
    "resourceGroupName" = $rgName;
    "location" = $location;
    "kind" = "GlobalDocumentDB";
}

$cosmosDb = New-AzCosmosDBAccount @cosmosDbProperties
$databaseProperties = @{
    "resourceGroupName"  = $rgName;
    "accountName"        = $accountName;
    "databaseName"       = "your-database";
}
$database = New-AzCosmosDBSqlDatabase @databaseProperties

$collectionProperties = @{
    "resourceGroupName" = $rgName;
    "accountName"       = $accountName;
    "databaseName"      = "your-database";
    "collectionName"    = "your-collection";
    "partitionKey"      = @{
        "paths"      = @("/userId");
        "kind"       = "Hash";
        "dataType"   = "String";
    }
} 

$collection = New-AzDocumentDbCollection @collectionProperties
结论

在设计 Cosmos DB 数据库模型时,选择正确的分区键至关重要。正确选择分区键可以提高查询效率和并发性能。Cosmos DB 提供了灵活性,让开发人员自定义分区键或使用系统生成的分区键。