Cosmos DB最小分区

时间:2019-07-08 07:26:53

标签: azure-functions azure-cosmosdb azure-eventhub azure-eventhub-capture

我们有一个IoT场景,以Azure Event Hub作为我们的数据提取服务。我们提出的体系结构是,我们在EH上进行了事件捕获(窗口= 15分钟),最后使用Azure Batch服务处理捕获的数据一天的时间/定期间隔,然后存储在冷藏库中(斑点/数据湖)。 我们还希望有一个Event Hub-> Function App-> Cosmos DB的管道,用于瞬时查询,这些查询可能无法通过事件捕获方法使用(因为它们不会是瞬时的)。关于cosmos db的存储,我们计划将ttl = 24/48小时。现在的问题是,如果我们选择deviceId的一个分区,并且高于ttl,我们将无法有效利用该分区(最大= 10GB),并且有多个分区会影响成本。 因此,我的问题是我们可以使用哪些其他策略(其他数据库/分区机制)来优化(主要关注点-成本效率)数据库存储?

  1. 尝试过的单一分区集合-在移至更高级别的设备时将不可用
  2. 按时间(小时/分钟)划分,这意味着不希望使用预付款模式

1 个答案:

答案 0 :(得分:2)

首先,您绝对需要对容器进行分区。 deviceId将是密钥的完美匹配,但是我知道您可能会填满分区,因此您可以查看组合密钥。组合键是由文档的两个不同属性组成的键。您的情况可能是deviceId-somethingElse。它需要是文档中的一个单独属性,理想情况下称为partitionKey,由您选择的属性的值自动生成。

我需要清除两件事,我认为您不太了解。

  1. Cosmos DB中的分区数不会直接影响定价。它之所以会受到间接影响,是因为在系统中存储了很多数据之后,Cosmos将创建更多的物理分区,而这些分区又将各自分配最少的RU / s。
  2. 数据大小对定价的影响很小,可以忽略不计。