MongoDB分片详解

yizhihongxing

MongoDB分片详解

什么是MongoDB分片

MongoDB分片是指将数据水平分隔为多个部分,存储在不同的服务器上。这样做的目的是为了解决单一MongoDB实例容量有限的问题,以此来满足庞大数据量的存储需求。

分片设置

分片设置主要包括3个部分:配置服务器、mongod分组和路由器(mongos)。

配置服务器

配置服务器是MongoDB集群的核心部分,用于存储集群的元数据信息。配置服务器通常至少需要3 个。

以下是在Linux上安装配置服务器的步骤:

  1. 在MongoDB官网下载二进制文件
  2. 解压后放在/usr/local/mongodb-shard目录下
  3. 在/usr/local/mongodb-shard下创建mkdir db/cs1/db
  4. 创建配置文件touch cs1.cfg
  5. 编辑配置文件vim cs1.cfg
  6. 添加内容

```
systemLog:
destination: file
path: "/usr/local/mongodb-shard/logs/cs1.log"
logAppend: true
storage:
dbPath: "/usr/local/mongodb-shard/db/cs1/db"
journal:
enabled: true

端口号 27017 是一个不错的选择

net:
port: 27017
bindIp: 0.0.0.0
sharding:
clusterRole: configsvr
```
7. 启动MongoDB配置服务器/ usr / local / mongodb-shard / bin /mongod --config / usr / local / mongodb-shard/cs1.cfg

mongod分片组

mongod分片组是用于MongoDB分片的核心部分。主要作用是将数据分布在不同的服务器上。

以下是在Linux上安装mongod分片组的步骤:

  1. 在MongoDB官网下载二进制文件
  2. 解压后放置在/usr/local/mongodb-shard文件夹中
  3. 在/usr/local/mongodb-shard下创建mkdir db/shard1/db
  4. 创建配置文件touch shard1.cfg
  5. 编辑配置文件vim shard1.cfg
  6. 添加内容

```
systemLog:
destination: file
path: "/usr/local/mongodb-shard/logs/shard1.log"
logAppend: true
storage:
dbPath: "/usr/local/mongodb-shard/db/shard1/db"
journal:
enabled: true

注意,每个分片的端口应该一致

比如在服务1 和服务2上,都应该使用 27017

net:
port: 27017
bindIp: 0.0.0.0
sharding:
clusterRole: shardsvr
# 以上参数会经常变化,需要根据需要配置
# 下面这个参数是mongod运行后,能够被mongos所识别的名字
# 这个名字要含有这个分片的具体位置信息
# 比如,我选择用mongod1,mongod2来表示两台服务器的不同分片
# 意味着这些分片位于完全不同的物理位置,需要命名不同的名称
replication:
replSetName: shard1
```
7. 启动mongod分片组/ usr / local / mongodb-shard / bin /mongod --config / usr / local / mongodb-shard/shard1.cfg

路由器(mongos)

路由器(mongos)是MongoDB分片的入口,它将所有的读写请求路由到正确的mongod实例上。

以下是在Linux上安装路由器(mongos)的步骤:

  1. 在MongoDB官网下载二进制文件
  2. 解压后放置在/usr/local/mongodb-shard文件夹中
  3. 创建配置文件touch mongos1.cfg
  4. 编辑配置文件vim mongos1.cfg
  5. 添加内容

systemLog:
destination: file
path: "/usr/local/mongodb-shard/logs/mongos1.log"
logAppend: true
net:
port: 27017
bindIp: 0.0.0.0
sharding:
configDB: "config/localhost:27017"

  1. 启动mongos
    /usr/local/mongodb-shard/bin/mongos --config /usr/local/mongodb-shard/mongos1.cfg

分片集合

场景:假设有一个名为customers的集合,他们的数据比较大,现希望将该集合进行分片。

创建索引

在mongos实例中运行以下命令创建索引:

use db
db.customers.createIndex({phone:1,email:1})

启用分片

在mongos实例中运行以下命令启用分片:

use admin
sh.enableSharding("db")

sh.shardCollection("db.customers",{phone:1,email:1})

这个命令的含义是:使用phoneemail字段将集合db.customers进行分片。这样做后,每条文档都会分配到不同的mongod实例中存储。

示例说明

以上内容可能不是太好理解,下面我将通过一个简单的例子说明怎样进行MongoDB分片。

假设我们的数据包含两个collection:名称为students和teachers,students至少拥有1000万条数据,teachers仅有几千条数据。在这种情况下,我们可以将students进行分片,而将teachers保留在单实例中。

具体步骤如下:

克隆现有实例,以3副本的方式在三个节点上运行

# clone mongoD2
mongod --port 20001 --dbpath /data/db2_1 --replSet myset --fork --logpath /data/db2_1/log
# create dir
mkdir /data/db2_2 /data/db2_3
# Start the second and third instances
mongod --port 20002 --dbpath /data/db2_2 --replSet myset --fork --logpath /data/db2_2/log
mongod --port 20003 --dbpath /data/db2_3 --replSet myset --fork --logpath /data/db2_3/log

启动MongoS路由器

mongos --configdb myset/localhost:20001,localhost:20002,localhost:20003 --port 20000 --fork --logpath /data/mongos.log

启用分片

此时,我们要将students集合进行分片,我们应该做的第一步是向MongoDB导入一些数据。然后我们在MongoS实例上运行以下命令:

# Insert data
for(i=1; i<2000000; i++) {
db.students.insert({sid:i,name:"test",score:i%100})
}

# Enable Sharding
sh.enableSharding("test")
sh.shardCollection("test.students",{sid: "hashed"})

现在,列表test.students已经成功进行分片。

总结

通过以上步骤,MongoDB分片集群就可以顺利地建立了。我们可以向其中的任何一个mongos节点发出任何查询请求,mongos会将请求转发到正确的MongoDB分片集群服务器上。这样,我们就可以存储更多的数据来处理业务需求了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MongoDB分片详解 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • NoSQL是什么?

    NoSQL是指“非关系型数据库”(Not only SQL),是一类数据库管理系统的统称。相对于传统的关系型数据库(SQL),NoSQL数据库不依赖固定的表格模式,通常以键-值对、文档、列族或者图形结构来存储数据。 NoSQL数据库被广泛应用于Web应用程序、大数据和实时分析等领域,因为它们能够处理大量的非结构化数据,并具有可扩展性和高可用性等优点。 NoS…

    2023年3月13日
    00
  • MongoDB基础之查询文档

    下面为您详细讲解MongoDB基础之查询文档的完整攻略: 查询整个集合 要查询整个集合,可以使用db.collection.find()方法。该方法返回集合中的所有文档,并按照插入顺序返回。 db.collection.find() 该命令会返回集合中所有的文档,以JSON格式显示。 使用find()函数查询指定条件的文档 可以通过指定查询条件来查询集合中的…

    MongoDB 2023年5月16日
    00
  • go build 通过文件名后缀实现不同平台的条件编译操作

    在Go语言中,可以使用go build命令将源代码编译成可执行程序。 Go提供了一种条件编译的特性,通过文件名后缀进行不同平台的条件编译操作。 具体的实现策略如下: 将不同平台的相同代码保存到以不同平台为后缀的文件中,然后在go build命令中指定需要编译的平台的后缀即可。 例如,我们在Windows和Linux环境下需要处理不同的逻辑,可以将它们放到两个…

    MongoDB 2023年5月16日
    00
  • MongoDB数据库查询性能提高40倍的经历分享

    MongoDB是一款非关系型数据库,它的查询性能在大规模数据下可以得到进一步的提升。下面我们将分享一条MongoDB数据库查询性能提高40倍的攻略,包含两个示例: 1. 按条件查询数据时使用索引 MongoDB 是支持索引的,但当查询的条件不是在索引的字段上时,就不能利用索引查询,这样查询效率会非常低下。如果想要在非索引字段上执行查询,请尝试创建相关的索引,…

    MongoDB 2023年5月16日
    00
  • mongoDB分页的两种方法(图例)

    MongoDB分页的两种方法(图例) 在MongoDB中实现分页的方式有很多,但是比较常用和简单的方式是采用limit和skip的方式。这两种方式的具体使用方式将在下文中详细说明。 方法一:使用skip和limit实现分页 使用skip和limit方式可以很容易的实现分页功能。其中skip用于指定从第几条记录开始查找,limit用于指定需要查询的记录数量。 …

    MongoDB 2023年5月16日
    00
  • MongoD管理数据库的方法介绍

    下面是MongoDB管理数据库的完整攻略: MongoDB管理数据库的方法介绍 背景介绍 MongoDB是一款非关系型数据库,具有高可扩展性、高性能、高灵活性等优点。本文将介绍MongoDB的管理方法,帮助管理员更好地管理MongoDB数据库。 常用的MongoDB管理工具 MongoDB提供了多个工具来帮助管理员管理数据库,常用的包括: Mongo She…

    MongoDB 2023年5月16日
    00
  • 28个MongoDB经典面试题详解

    28个MongoDB经典面试题详解攻略 问题1:什么是MongoDB? MongoDB是一个基于分布式文件存储的开源数据库系统,以易于使用、高性能和可扩展性被广泛使用。 问题2:为什么使用MongoDB? MongoDB具有以下优点: 高可扩展性 更好的性能 无需定义架构 极其强大的查询语句 支持灵活的文档结构 问题3:什么是MongoDB集合? Mongo…

    MongoDB 2023年5月16日
    00
  • Python简单连接MongoDB数据库的方法

    连接MongoDB数据库是Python开发的一个基本功,本文将介绍如何使用Python连接MongoDB数据库,并给出两个代码示例来说明。 步骤一:安装pymongo模块 pymongo是Python操作MongoDB数据库的第三方库,首先需要安装该模块。可以使用pip安装: pip install pymongo 步骤二:连接MongoDB数据库 连接Mo…

    MongoDB 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部