子分区或复合分区文档db

时间:2016-02-25 11:50:16

标签: azure azure-cosmosdb

在msdn的一篇文章中, https://azure.microsoft.com/en-in/documentation/articles/documentdb-partition-data/,  有一行指定可以完成“子分区”或“复杂分区”。这是否意味着:

  1. 集合内可以进行子分区吗?
  2. 在单个DocumentDb中,可以有多个分区逻辑?例如,我将在一个Document Db中包含四个集合。其中两个可以基于哈希,另外两个可以基于范围吗?
  3. 如果这些答案中的任何一个是肯定的,那么有人可以给我一个链接,这可能会让我得到一个相同的例子吗?

1 个答案:

答案 0 :(得分:1)

数目:

  1. 没有明确的方法来对集合中的数据进行子分区。通常使用字段来表示文档类型或在每个文档上使用isTypeA: true键值对,但这是您的应用程序采用的约定。但是,您可以为每个帐户创建多个数据库(默认限制为5,但可以根据请求进行扩展),每个数据库都可以拥有自己的一组集合。我在(temporalize-api)中使用了这个两级层次结构。 TenantID使用查找表加上默认值来确定我的顶级分区(数据库)。这允许我将关键或高价值租户拉入负载较低的数据库中,并将其他所有人保留为默认值。我在EntityID上使用一致哈希来进行二级分区(集合)。

  2. 当然,没有什么能阻止你这样做。请特别注意您链接到的Aravind文章中最后一节(开发分区应用程序)中的精彩讨论。它包括您需要决定和实施的事项清单。为.NET SDK提供的分区解析器不会为您解决这些问题。

  3. 我还没有看到我认为是完整系统的开源示例,包括添加容量时的平衡,存储分区映射/元数据的位置以及查询扇出/聚合优化。我有一个node.js正在进行中(temporalize-api)并且实际上正在生产中。我已经做出了关于我将如何进行平衡和查询扇出的决定,并且这些已记录在该链接文件的注释中,但我还没有实现所有这些。我将分区元数据存储在“第一个”数据库的“第一个”集合中。