Eve*_*ker 0 python partitioning azure-cosmosdb
我正在研究 CosmosDB 的 Python 示例(请参阅CosmosDB for Python),我看到一个容器定义如下:
partition_key = PartitionKey(path='/id', kind='Hash')
db.create_container(id=id, partition_key=partition_key)
Run Code Online (Sandbox Code Playgroud)
读取项目的代码:
response = container.read_item(item=doc_id, partition_key=doc_id)
Run Code Online (Sandbox Code Playgroud)
现在我的困惑是为什么选择与唯一文档 ID 相同的分区键。那么,这里分区有什么用呢?
在我看来,分区适用于共享某些公共组的键,例如食物组的分区。
小智 5
在我看来,分区适用于共享某些公共组的键,例如食物组的分区。
这并不完全正确。如果您查看文档,它会说您应该选择具有高基数的分区键。换句话说,该属性应该具有广泛的可能值。它应该是一个不会改变的值。您还需要注意,如果要更新或删除文档,则需要传递分区键。
在后台发生的事情是,Cosmos 可以拥有从 1 到无穷多个服务器。它使用您的分区键对数据进行逻辑分区。但它仍然在一台服务器上。如果您的吞吐量超过 10K RU 或者存储超过 50GB,Cosmos 将自动拆分为 2 台物理服务器。这意味着您的数据被分为 2 个服务器。拆分可以继续进行,直到每台服务器的最大吞吐量< 10K RU 并且每台服务器的存储< 50GB。这就是 Cosmos 管理无限规模的方式。您可能会问如何预测文档可能进入哪个分区。答案是你不能。Cosmos 使用分区键生成一个哈希值,其值介于 1 和服务器数量之间。
因此 doc id 是一个很好的分区键,因为它是唯一的并且可以有很大范围的值。
请注意,一旦 Cosmos 分区到多个服务器,即使您减少存储或减少吞吐量,目前也没有自动方法来减少服务器数量。
| 归档时间: |
|
| 查看次数: |
1410 次 |
| 最近记录: |