【问题标题】:(When) is it better to enlarge CosmosDb partitions to avoid cross-partition queries?(何时)扩大 CosmosDb 分区以避免跨分区查询更好?
【发布时间】:2021-12-14 18:19:35
【问题描述】:

从文档和其他 CosmosDb 文章中可以清楚地看出,较小的分区有很多好处,但跨分区查询的成本也更高。那么扩大分区以避免这些跨分区查询是否明智?

举个例子可能会有所帮助。假设您的容器有代表城市的文档。在其他字段中,每个文档都有一个country、一个region 和一个name。您可以country 进行分区,以便全国范围内的查询可以集中在一个分区上。但是较小的读取(例如,单个区域或少数几个城市名称)需要查看更大的分区。这是一个很好的权衡吗?

显然,具体情况会根据更频繁地需要哪些查询而有所不同,而优化的唯一明智方法是在测量之后。但一般而言,跨分区查询的额外成本是否足以证明使用更大分区的合理性?

【问题讨论】:

    标签: azure-cosmosdb database-partitioning


    【解决方案1】:

    如果您的所有数据都小于 50GB,那么它的重要性就会小得多,因为您的所有数据(在 20GB 逻辑分区内)都将位于一个物理分区上。随着集合大小的增长,跨分区查询变得越来越昂贵。查询必须遍历的物理分区越多以提供结果,RU/s 成本就越高,延迟也越高。

    【讨论】:

    • 经过一段时间的折腾,让我确认一下:当容器足够大以跨越多个物理分区时,更大的逻辑分区是避免跨分区查询的明智方法 - 这得到贵的快。对于小型容器,它的相关性较低,因此较大的分区仍然可以。当然请记住,最好查看实际使用情况并进行调整以适应。
    • 尽量不要考虑设计分区的大小。要记住的关键是,如果您的设计迫使您以高并发性提供跨分区查询,那么您的数据库将无法扩展。像 Cosmos 这样的数据库可以提供无限的规模,因为它可以跨机器集群横向扩展。但是,如果您必须接触这些机器中的每一台来处理大量查询,那么您的设计目的就是要高效。我最近做了一个演示,如果你是 Cosmos 的新手,我会看这个视频,youtu.be/3gEytt-Jops
    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多