首页 文章

Azure Cosmos DB - 了解分区键

提问于
浏览
15

我正在设置我们的第一个Azure Cosmos数据库 - 我将导入第一个集合,即我们的一个SQL Server数据库中的表中的数据 . 在设置集合时,我无法理解分区键的含义和要求,我在设置此初始集合时必须特别指出 .

我在这里阅读了文档:(https://docs.microsoft.com/en-us/azure/cosmos-db/documentdb-partition-data)并且仍然不确定如何继续使用此分区键的命名约定 .

有人可以帮助我理解我应该如何考虑命名这个分区键?请参阅下面的屏幕截图,了解我要填写的字段.
Partition Key Name

如果它有帮助,我导入的表包含7列,包括唯一的主键,一列非结构化文本,一列URL和该记录的URL的其他几个辅助标识符 . 不确定是否有任何信息与我如何命名我的分区密钥有关 .

编辑:我已根据@Porschiey的请求添加了我正在导入的表中的几个记录的屏幕截图 .

enter image description here

5 回答

  • 14

    CosmosDB可用于存储任何数据限制 . 它在后端的作用是使用分区键 . 它与主键相同吗? - 没有

    主键:唯一标识数据分区键有助于分片数据(例如,当城市是分区键时,城市纽约的一个分区) .

    分区的限制为10GB,我们越好地跨分区传播数据,我们就越能使用它 . 虽然最终需要更多连接才能从所有分区获取数据 . 示例:从查询中获取相同分区中的数据总是比从多个分区获取数据更快 .

  • 3

    表上的每个分区最多可以存储10GB(单个表可以存储任意数量的文档模式类型) . 您必须选择分区密钥,以便针对该密钥存储的所有文档(因此属于该分区)都低于该10GB限制 .

    我现在也在考虑这个问题 - 分区键是否应该是某种类型的日期范围?在这种情况下,它实际上取决于在一段时间内存储了多少数据 .

  • 6

    分区键充当逻辑分区,现在这是一个逻辑分区 . 逻辑分区可能会根据您的要求而有所不同,假设您有一个可以根据您的客户进行分类的数据,因为该客户ID将充当逻辑分区,并且将根据客户ID放置用户的信息 . 对查询有什么影响?现在,在查询时,您会将分区键作为提要选项,并且不会包含在您的过滤器中 . 例如:如果您的查询是

    SELECT * FROM T WHERE T.CustomerId= 'CustomerId';
    

    它将是现在

    var options = new FeedOptions{ PartitionKey = new PartitionKey(CustomerId)};
    
    var query = _client.CreateDocumentQuery(CollectionUri,$"SELECT * FROM T",options).AsDocumentQuery();
    
  • 2

    老实说,video here *是理解CosmosDb中分区的主要帮助 .

    但是,简而言之:PartitionKey是一个属性 will exist 在每个对象上最好用于将类似对象组合在一起 .

    好的例子包括位置(如城市),客户ID,团队等 . 当然,它很大程度上取决于你的解决方案;所以,如果您要发布您的对象的样子,我们可以推荐一个好的分区键 .

    编辑:应该注意,10GB以下的集合不需要PartitionKey . (感谢David Makogon)


    • The video过去住在this MS docs page,名为"Partitioning and horizontal scaling in Azure Cosmos DB",但此后被删除 . 上面提供了直接链接 .
  • 3

    分区键用于分片,它充当数据的逻辑分区,并为Cosmos DB提供跨分区分布数据的自然边界 .

    你可以在这里阅读更多相关信息:https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data

相关问题