Azure cosmosdb DocumentDB中的分区

Azure cosmosdb DocumentDB中的分区,azure-cosmosdb,Azure Cosmosdb,我想知道以下场景中已分区的DocumentDB集合中的partitionkey: 集合中的每个文档C包含两个字段:a和b 对于文档C,必须使用a和b两个字段作为查找条件(在sql查询where子句中使用它们),进行快速查找 我认为有必要以某种方式指定这两个领域来实现目标2。是否有任何方法可以将a和b两个字段指定为我的集合的分区键 如果没有,还有其他解决方案吗?我认为这里可能混淆了两个概念:分区和索引 为了支持使用a和b作为标准的快速检索,您需要在这些字段上为文档编制索引。幸运的是,Documen

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

  • 集合中的每个文档
    C
    包含两个字段:
    a
    b
  • 对于文档
    C
    ,必须使用
    a
    b
    两个字段作为查找条件(在sql查询
    where
    子句中使用它们),进行快速查找
  • 我认为有必要以某种方式指定这两个领域来实现目标2。是否有任何方法可以将
    a
    b
    两个字段指定为我的集合的分区键


    如果没有,还有其他解决方案吗?

    我认为这里可能混淆了两个概念:分区和索引

    为了支持使用a和b作为标准的快速检索,您需要在这些字段上为文档编制索引。幸运的是,DocumentDB已经为您编制了索引,因此您可以获得快速的性能。看

    分区是一种在多个集合上分割数据的方法,如果您有大量数据,可以处理超过单个集合限制的数据。指定分区键时,具有相同键的文档将转到同一集合。看


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

    我认为您可能混淆了两个概念—分区和索引

    为了支持使用a和b作为标准的快速检索,您需要在这些字段上为文档编制索引。幸运的是,DocumentDB已经为您编制了索引,因此您可以获得快速的性能。看

    分区是一种在多个集合上分割数据的方法,如果您有大量数据,可以处理超过单个集合限制的数据。指定分区键时,具有相同键的文档将转到同一集合。看


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

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

    • 选择
      a
      b
      (接收器)作为分区键。由于DocumentDB自动为所有属性编制索引,因此将针对单个分区执行查询
    • 创建一个新属性,该属性是
      a
      b
      的串联值(例如
      来自:a@b.com;致:c@d.com
      并将其用作分区键。然后在执行查询时,将新属性作为筛选器包含在查询中
    对于由
    a
    b
    进行的查询,第二种方法将比第一种更有效。如果您将查询与
    a
    或两者混合使用(
    a
    b
    ),则第一种方法更好,因为两种查询都将针对单个分区


    但正如其他人所提到的,无论采用哪种方法,您都会有低延迟的查询响应,或者您甚至选择了不同的分区键(如事务ID)。但是,对于过滤
    a
    b
    的查询工作负载,上述方法将是最理想的方法。有两种方法可以做到这一点:

    • 选择
      a
      b
      (接收方)作为分区键。由于DocumentDB会自动索引所有属性,因此将针对单个分区执行查询
    • 创建一个新属性,该属性是
      a
      b
      的串联值(例如
      来自:a@b.com;致:c@d.com
      并将其用作分区键。然后在执行查询时,将新属性作为筛选器包含在查询中
    对于由
    a
    b
    进行的查询,第二种方法将比第一种更有效。如果您将查询与
    a
    或两者混合使用(
    a
    b
    ),则第一种方法更好,因为两种查询都将针对单个分区


    但正如其他人提到的,无论采用哪种方法,您都会有低延迟的查询响应,或者您甚至选择了不同的分区键(如事务ID)。但是对于过滤
    a
    b

    的查询工作负载,上述方法将是最理想的。谢谢您的澄清。在我的情况下,文档C是事务和字段a是事务的发送方id,字段b是该事务的接收方id。我想查找a发送给b的所有事务。我使用事务id本身作为分区键。您确定需要分区吗?您处理的数据大小是多少?答案仍然是一样的-docdb将执行有效的cient使用您的查询搜索所有分区,然后合并结果。这就像300G事务数据。我做了一个测试,在几乎1分钟的等待时间内从a到b检索了5k个事务,以检索这组事务。因此有一些建议-1.检查上面分区链接中有关查询多个分区的部分,然后执行以下操作:2。考虑在用户和事务ID之间有一个映射,如果你的情况是这样的话,3。如果你想优化这种查询,为什么不使用发件人ID作为分区键?再一次感谢Eran的建议。ario此处需要通过交易id本身进行查找。感谢您的澄清。在我的情况下,文档C是交易,字段a是交易的发送方id,字段b是该交易的接收方id。我