使用分片扩展系统
在MongoDB中,对文档执行操作时,除了要指定数据库,还必须指定集合。例如,数据库名为 cloud-docs ,若要执行查询,还需指定集合,如 spreadsheets 。数据库名和集合名的组合在整个系统中是唯一的,通常被称为命名空间,一般用集合名和数据库名通过句点连接来表示,如 cloud-docs.spreadsheets 。
1. 分片集群中数据的分布方式
在MongoDB中,数据有不同的逻辑分组方式,而这些分组与分片是如何相互作用的,又能在哪些分组上对数据进行分区呢?数据在分片集群中有两种分布方式:
- 整个数据库层面 :每个数据库及其所有集合都放在自己的分片上。
- 集合的分区或块层面 :集合内的文档根据文档中称为分片键的一个或一组字段的值进行划分,并分散到多个分片上。
你可能会疑惑,为什么MongoDB基于块而不是单个文档进行分区。虽然文档是最小的可能单位,但分区数据后还需要能够再次找到它。如果按文档级别分区,例如让类似Google Docs应用中的每个电子表格独立移动,就需要在配置服务器上存储元数据来独立跟踪每个文档。对于小文档系统,一半的数据可能最终是配置服务器上用于跟踪实际数据存储位置的元数据。
另外,你可能会好奇为什么从整个数据库到集合的分区在粒度上有跳跃,为什么没有在整个集合级别进行分布而不分割集合的中间步骤。实际上,这在理论上是完全可行的,只是尚未实现。不过,由于数据库和集合的关系,有一个简单的解决方法。如果你希望不同的集合(如
超级会员免费看
订阅专栏 解锁全文
2105

被折叠的 条评论
为什么被折叠?



