我们有一个IoT场景,以Azure Event Hub作为我们的数据提取服务。我们提出的体系结构是,我们在EH上进行了事件捕获(窗口= 15分钟),最后使用Azure Batch服务处理捕获的数据一天的时间/定期间隔,然后存储在冷藏库中(斑点/数据湖)。 我们还希望有一个Event Hub-> Function App-> Cosmos DB的管道,用于瞬时查询,这些查询可能无法通过事件捕获方法使用(因为它们不会是瞬时的)。关于cosmos db的存储,我们计划将ttl = 24/48小时。现在的问题是,如果我们选择deviceId的一个分区,并且高于ttl,我们将无法有效利用该分区(最大= 10GB),并且有多个分区会影响成本。 因此,我的问题是我们可以使用哪些其他策略(其他数据库/分区机制)来优化(主要关注点-成本效率)数据库存储?
答案 0 :(得分:2)
首先,您绝对需要对容器进行分区。 deviceId将是密钥的完美匹配,但是我知道您可能会填满分区,因此您可以查看组合密钥。组合键是由文档的两个不同属性组成的键。您的情况可能是deviceId-somethingElse
。它需要是文档中的一个单独属性,理想情况下称为partitionKey
,由您选择的属性的值自动生成。
我需要清除两件事,我认为您不太了解。