据我所知,该团队的官方建议是将所有数据类型放入单个集合中,这些集合type=someType在文档上具有类似字段以区分类型。
现在,如果我们假设具有分区的大型数据库,其中不同的对象类型可以是:
如何组织事物,以便应该在一起的事物最终在同一个分区中?
例如,假设我们有:
用户
博客帖子
博文评论
如果我们将它们作为单独的类型存储type=user|blogPost|blogPostComment在同一个集合中,我们如何确保用户、他的博客文章和所有相应的评论最终在同一个分区中?是否有一些最佳实践?
[更新] 你能完全避免跨分区查询吗?这应该是一个目标吗?或者你只是想尽量减少它们?例如,您可以为 99% 的案例/查询完美地分区数据,但随后您需要一些仪表板来显示所有数据的聚合。这是你认为不可避免的事情并试图最小化还是有可能完全避免它?
我已经在其他关于 Cosmos 的类似问题中广泛地讨论了这一点。
基本上,在单个 Cosmos 集合中处理许多不同的逻辑实体类型时,最简单的选择是在所有文档上放置一个通用(或抽象,如您所指)分区键。在这一点上,确保在运行时选择适当的值是应用程序的关注点。我通常要么命名该文档属性partitionKey,routingKey或者类似的东西。
这在设计最佳查询效率时非常重要,因为您选择的分区键会对查询和吞吐量性能产生巨大影响。像这样的通用密钥可让您设计数据的最佳存储,因为它有益于您正在构建的任何应用程序。
甚至类似的事情tenant也没有意义,因为不同的租户可能具有截然不同的数据大小和访问模式。相反,您可以将tenantIdat runtime 作为分区键的一部分作为一种组合包含在内。
更新:对于某些查询模式,可能可以完全从单个分区中提供服务。如果事情最终发生交叉分区,这绝对不是世界末日。系统还是很快的。如果可能,限制给定查询需要触及的分区数量是理想的,但您永远不会 100% 的时间摆脱它。
| 归档时间: |
|
| 查看次数: |
1570 次 |
| 最近记录: |