首页 文章

我们可以在azure cosmos DB中使用非主键作为分区键吗?

提问于
浏览
0

我在cosmos db中创建了一个可以超过10GB的Collection . 该集合没有任何主键 . 将我将经常查询的非主键字段作为分区键是否是个好主意?

1 回答

  • 0

    将我将经常查询的非主键字段作为分区键是否是个好主意?

    实际上,分区键的选择是一个值得重复权衡的问题 . 最好的分区键是提供均匀分布和更高基数的键 .

    由于您现在可以选择经常查询非主键,因此我只讨论一些可能的正面和负面内容作为参考 .

    首先,我们可以说主键是分区键的最安全且可能最合适的选择 .

    它保证了值的唯一性,除了唯一键之外,它是唯一的实现方式 . 分发将是均匀的,因为主键将是您的分区键,您将能够使用它来通过读取来检索文档,而不是查询,这降低了操作速度和成本 .

    在性能方面,如果您的查询频繁字段不是分区键,则您的查询肯定会通过跨越分区来降低查询性能 . 当然,如果数据量很大,它将产生很大的影响 .

    在成本方面,宇宙数据库主要通过存储空间和RU消耗来收费 . 正如您所说,选择非主键作为分区键将导致较少的索引存储 . 如果大多数查询不是跨分区的,那么它也可以节省RU消耗 .

    在使用存储过程,触发器或UDF方面,您不能通过存储过程和触发器使用跨分区事务 . 因为然后进行分区,以便在使用它们时需要指定分区键(基数只有1) .

    请注意,如果创建了分区键,则以后无法删除或修改它 . 因此,在选择之前请考虑它,并确保进行数据备份 .

    更多细节,仍然参考official doc .

相关问题