Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 为什么我不应该将所有数据放在一个CosmosDB集合中?_Azure_Azure Cosmosdb - Fatal编程技术网

Azure 为什么我不应该将所有数据放在一个CosmosDB集合中?

Azure 为什么我不应该将所有数据放在一个CosmosDB集合中?,azure,azure-cosmosdb,Azure,Azure Cosmosdb,问题 我知道Cosmos DB的价格非常高,如果与许多数据类型一起使用,价格可能会很高 我认为一个好的结构应该是将我拥有的每种数据类型都放在它们自己的集合中,就像数据库中的表一样(不完全一样) 但是,每次收集的费用至少为每月24美元。这是如果我选择“固定”,这将我限制为10GB,并且不可扩展。这几乎不是宇宙DB的要点,所以我宁愿选择“无限”。但是,这里的价格至少是每月60美元 每个数据类型每月60美元 这包括1000 RU,但除此之外,我还要为消费支付更多 如果我有一些数据类型,这可能没问题,但

问题

我知道Cosmos DB的价格非常高,如果与许多数据类型一起使用,价格可能会很高

我认为一个好的结构应该是将我拥有的每种数据类型都放在它们自己的集合中,就像数据库中的表一样(不完全一样)

但是,每次收集的费用至少为每月24美元。这是如果我选择“固定”,这将我限制为10GB,并且不可扩展。这几乎不是宇宙DB的要点,所以我宁愿选择“无限”。但是,这里的价格至少是每月60美元

每个数据类型每月60美元

这包括1000 RU,但除此之外,我还要为消费支付更多

如果我有一些数据类型,这可能没问题,但如果我有一个拥有30种数据类型的成熟业务应用程序(这一点也不少见),它至少会变成每月1800美元。作为起价。当我还没有数据的时候

问题

收集的数据结构不严格。我可以在同一个集合中存储不同类型的文档

当使用“无限”集合时,我可以使用分区键,分区键应用于对数据进行分区,以确保可伸缩性

但是,为什么不在分区键中包含数据类型?

然后,分区键变成如下所示:

[customer-id]-[data-type]-[actual-partition-value, like 'state']
一个快速移动,我的最低成本是60美元,其余的是基于消费。不管数据量如何,分区键都可以确保令人满意的性能。那么我错过了什么?这种方法有什么问题吗

更新


Microsoft现在支持跨所有容器共享RU(至少10000 RU),因此这个问题基本上不再相关,因为您现在可以自由选择将数据分离到不同的容器中,而无需任何额外费用。

不,这本身就不会有问题。 归根结底,对于整个系统来说,1000 RU/s,或者更具体地说是一个瓶颈,您是否可以接受


事实上,通过将文档id作为分区键,您可以进一步简化这一过程。这将保证文档id的唯一性,并在CosmosDB中实现最大可能的分布和规模

这就是为什么(免责声明,我是这个项目的创建者),我没有注意到任何问题,即使是在具有许多不同数据类型的系统上


但是,您必须记住,即使您可以上下扩展此集合,您仍然会使用这一瓶颈限制整个系统。我建议您不要只创建一个集合,而应该创建2到3个包含共享实体的集合。如果这项工作做得足够聪明,并且您以逻辑方式批处理实体,那么您就可以为系统的特定部分扩展吞吐量。

不,从本质上讲,不会有问题。归根结底,这取决于整个系统是否适合1000 RU/s。事实上,您可以通过将文档id作为分区键来实现CosmosDB中的最大分布和规模,从而进一步简化此过程。这正是为什么我没有注意到任何问题,即使是在具有许多不同数据类型的系统上。@nickchapsa你的评论听起来更像是一个答案,那么,是否可以将其作为一个发布?@Haspemulator哦,很抱歉,我想将其作为一个答案来写,但我单击了错误的区域。您始终可以从固定收集开始,一旦接近限制,就可以迁移到无限收集。在您实际需要之前过度配置可能会很昂贵。@ImrePühvel,虽然我知道您的意思,但在这里它不仅仅是配置,因为Fixed不支持分区键,而Unlimited支持分区键。因此,当迁移到另一个集合类型时,我们必须更改代码中非常基本的内容。有了这个问题,我希望避免这个问题。如果我们有不同的分区,这真的是一个瓶颈吗?假设我们在一个分区中有10个文档。如果我们只需要一个分区的数据,那么这比在10个不同分区中拥有100个文档快吗?吞吐量是集合范围的,而不是分区范围的。不管你有多少个分区。如果您不断地抽取和查询数据,您可能会遇到这些429。知道分区值只会使您的查询更快、更具成本效益。“您的文档id是分区密钥”-注意,如果您需要id以外的select by,这将导致跨所有分区的扇出查询效率低下。@ImrePühvel如果他使用
[customer id]-[data type],这将是一个问题-[实际分区值,如“状态”]
approach.Nick,吞吐量是可以的,如果我需要更多的RU,我当然会购买更多。关于我建议的分区策略,它将在同一个分区中包含数千个文档。与您建议的策略不同,每个文档都有自己的分区。因此分区的结构不同。