首页 文章

在DocumentDB中进行分区

提问于
浏览
0

我想知道在以下场景中分区 DocumentDB 集合中的 partitionkey

  • 集合中的每个文档 C 包含2个字段: ab

  • 必须使用字段 ab 作为查找条件快速查找文档 C (在sql查询 where 子句中使用它们) .

我认为有必要以某种方式指定两个字段来完成目标2.有没有什么方法可以指定字段 ab 作为我的集合的分区键?

如果没有,有没有替代解决方案?

2 回答

  • 1

    有两种方法可以做到这一点:

    • 选择 ab (接收方)作为分区键 . 由于DocumentDB会自动为所有属性编制索引,因此将针对单个分区执行查询 .

    • 创建一个新属性,该属性是 ab 的连接值(例如 from:a@b.com;to:c@d.com 并将其用作分区键 . 然后在执行查询时,在查询中包含新属性作为过滤器 .

    第二种方法比 ab 的查询更有效 . 如果您只有 a 或两者( ab )混合查询,那么第一种方法更好,因为两个查询都将针对单个分区 .

    但正如其他人所提到的,无论采用哪种方法,您都会有低延迟的查询响应,或者您甚至选择了不同的分区密钥,如事务ID . 但对于在 ab 上进行过滤的查询工作负载,上述方法将是最佳方法 .

  • 1

    我想你可能在这里混淆了两个概念 - 分区和索引 .

    为了支持使用a和b作为标准的快速检索,您需要将这些文档编入索引 . 幸运的是,DocumentDB已经为您编制索引,因此您可以获得快速的性能 . 见https://docs.microsoft.com/en-us/azure/documentdb/documentdb-indexing

    分区是一种在多个集合中分割数据(如果有很多数据)的方法,以便处理超过单个集合限制的数据 . 指定分区键时,具有相同键的文档将转到同一个集合 . 见https://docs.microsoft.com/en-us/azure/documentdb/documentdb-partition-data

    那么在选择分区键时你应该考虑什么逻辑?根据经验,您希望在查询中出现的文档可以在同一个集合中找到 . 因此,例如,如果您执行大量返回给定userId的所有文档的查询,您可能希望按用户ID进行分区 .

相关问题