《MongoDB权威指南》学习整理----MongoDB分片

简介

MongoDB的分片和复制都是MongoDB为了提供大数据高负载为我们提供的提高性能的方式。两者都是使用类似集群(多个节点)的方式部署。不同之处在于,副本集中所有节点的存储的数据时一致的。而分片中的每个节点存储的数据一般都是不同的,类似于关系数据库中的水平切分,或DB2中的分区表。而且和复制一样,MongoDB可以自动化的处理分片、负载均衡,当然也可以人为的手动分片。

分片说明

上文提到过,分片的基本思想是类似于水平切分,即根据集合中文档的某个key将整个集合切分为多个结构相同,值不同的集合并将他们分布式的部署到多个mongoDB实例中。

当不使用分片的时候,与应用程序交互的MongoDB进程是mongod,当使用分片之后,与应用程序交互的是mongos进程,mongos下边是多个mongod进程。而mongos、mongod对于应用程序来看都是一样的。没有区别。

片键

设置分片的时候,需要从集合文档中选择一个key,该key作为对集合的分片依据,同时该key称为片键。

片键的选择

片键的选择决定了插入到集合的数据分布,而我们最期望的是均衡的分布片键,所以在选择片键的时候我们需要认真考虑。

片键一般都是索引。

片键的选择应遵循以下几条规则:

  • 不选取小基数片键
  • 不选取具有明显升、降序特征的片键,例如时间
  • 不选取随机片键

详细的片键选择,可以参阅《深入学习MongoDB》一书。

片键对查询的影响

如果对key1分片,那么在查询的时候如果按key1为条件查询,那么可以很好的利用分片,但是如果没有将key1作为查询条件,那么所有的分片都会被查询,低效。

片就是保存子集合的容器,可以是集群中的某个mongod实例,也可以是一个副本集。所以每个片中只能有一台活跃(主)服务器。

Mongos

mongos是分片中的路由进程,负责与应用程序直接交互,分发客户端请求,并将结果聚合后返回。它本身并不保存数据。

配置服务器

配置服务器存储了分片集群的配置信息:数据和片的对应关系。mongos进程会缓存、同步配置服务器的配置信息。同时,配置服务器并不需要很多空间和资源。

创建分片

启动服务器

  • 首先启动配置服务器:

mongod --dbpath 数据目录 --port 端口号

  • 启动mongos路由进程,mongos路由进程不需要数据目录,只需要指定配置服务器链接:

mongos --port 端口号 --configdb ip:port

  • 启动所有分片实例:

mongod --dbpath 数据目录 --prot 端口号

  • 将分片实例添加到集群中:

登录shell,链接mongos进程,使用db.funCommand({addShard:'IP:PORT',allowLocal:true})

上边的allowLocal属性只有在开发环境,也就是单机多个MongoDB实例的时候才会使用,生产中一般不会使用

  • 开启数据库分片功能

使用db.runCommand({'enablesharding':数据库名})

  • 设定片键

使用db.runCommand({'shardcollection':'集合名称','key':{key名称:1}})

生产环境配置

上边的操作是在开发环境中的分片配置,但是在生产环境中,需要更加健壮、稳定的配置。需要满足一下条件:

  • 多个配置服务器。
  • 多个mongos服务器
  • 每个片都是一个副本集
  • 正确设置w,阻塞复制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值