MongoDB分片 - Go语言中文社区

MongoDB分片


片键

  • 分片集合需要选择片键。 分片后无法更改分片键的选择。 每个分片集合只能有一个分片键。
  • 如果对非空集合进行分片,集合必须具有以分片键开头的索引。 对于空集合,如果集合尚未具有指定分片键的索引,MongoDB将创建包含片键的索引。

数据分块

  • MongoDB将分片数据划分为块。 每个块依据分片键进行切分,每个块的是一个半开半闭的集合,包含下届,不包含上届。

分片集合和未分片集合

  • 数据库可以同时存在分片和非分片集合。分片集合在集群中的所有分片上都有分布。 非分片集合存储在主分片上。 每个数据库都有自己的主分片。(每个数据库有一个主分片)
  • 主分片和副本集中的 主从 没有任何关系
  • mongos在创建新数据库时选择主分片,通常选择具有最少数据量的群集中的分片 mongos使用listDatabase命令返回的totalSize字段作为选择条件的考量之一。
  • 修改数据库的主分片 是会影响性能的(通过 movePrimary 命令,在修改期间不应该访问该数据库)

配置数据库(Config Servers)

  • 配置服务器存储分片集群的元数据。 元数据反映了分片集群中所有数据的分布状态。 元数据包括每个分片上的块列表以及定义块的范围。 -
  • mongos实例缓存此数据并使用它将读取和写入操作路由到正确的分片。 当群集有元数据更改时,mongos会更新缓存,例如Chunk Splits或添加分片。 Shards还从配置服务器读取块元数据。 -
  • 配置服务器还存储身份验证配置信息,例如基于角色的访问控制或群集的内部身份验证设置。

Mongos

  • MongoDB mongos实例将查询和写操作路由到分片集群中的分片。从应用程序的角度来看,mongos是分片集群的唯一接口。 应用程序永远不会与分片直接连接或通信。
  • mongos通过缓存配置服务器中的元数据来跟踪哪些数据在哪个分片上。
  • mongos没有持久状态并且消耗最少的系统资源。 最常见的做法是在与应用程序服务器相同的系统上运行mongos实例,但是也可以在分片或其他专用资源上维护mongos实例。
  • 查询时,要尽量让查询条件包含片键,或者包含片键的一部分,如果查询条件不符合最左前缀法则,那么就会导致广播式查询,影响查询性能,下面的例子是mongodb官网的例子

广播式查询

广播式查询

精确查询

精确查询

假设一个集合的片键是如下:
 {a: 1, b: 1, c: 1 }
 
The mongos program can route queries that include the full shard key or either of the
following shard key prefixes at a specific shard or set of shards:

那么只有查询条件是如下的两种,可以实现精确查询
{ a: 1 }
{ a: 1, b: 1 }
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/whp404/article/details/89713394
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢