MongoDB 分片:逐步教程及示例

MongoDB中的分片是什么?

分片是MongoDB中的一个概念,它将大型数据集分布到多个MongoDB实例中。

有时MongoDB中的数据会非常庞大,以至于针对这些大型数据集的查询会导致服务器上大量的CPU利用率。为了应对这种情况,MongoDB引入了分片的概念,也就是将数据集分布到多个MongoDB实例中。

可能很大尺寸的集合实际上被分割成多个集合或称为分片。从逻辑上看,所有分片作为一个集合协同工作。

如何实现分片

分片是通过使用集群来实现的,集群就是一组MongoDB实例。

分片包含以下组件

  1. 一个分片 - 这是基本要素,它是一个MongoDB实例,包含部分数据。在生产环境中,所有分片都需要是副本集的一部分。
  2. 配置服务器 - 这是一个MongoDB实例,它保存有关集群的元数据,基本上是关于将保存分片数据的各种MongoDB实例的信息。
  3. 一个路由器 - 这是一个MongoDB实例,它负责将客户端发送的命令重定向到正确的服务器。

分片集群的分步示例

步骤 1) 为配置服务器创建一个单独的数据库。

mkdir /data/configdb

步骤 2) 以配置模式启动MongoDB实例。假设我们有一个名为Server D的服务器,它将是我们的配置服务器,我们需要运行以下命令将该服务器配置为配置服务器。

mongod –configdb ServerD: 27019

步骤 3) 通过指定配置服务器来启动mongos实例。

mongos –configdb ServerD: 27019

步骤 4) 从mongo shell连接到mongo’s实例。

mongo –host ServerD –port 27017

步骤 5) 如果您有需要添加到集群的Server A和Server B,请发出以下命令。

sh.addShard("ServerA:27017")
sh.addShard("ServerB:27017")

步骤 6) 为数据库启用分片。如果我们想分片Employeedb数据库,请发出以下命令。

sh.enableSharding(Employeedb)

步骤 7) 为集合启用分片。如果我们想分片Employee集合,请发出以下命令。

Sh.shardCollection("db.Employee" , { "Employeeid" : 1 , "EmployeeName" : 1})

摘要

  • 教程中所述,分片是MongoDB中的一个概念,它将大型数据集分布到多个MongoDB实例中。