我在localhost上创建了三个mongodb实例,其中包含不同的端口,如
mongod.exe --config C:\MongoDB2.6\mongod.cfg
mongod.exe --config D:\MongoDB2.6\mongodinst1.cfg
mongod.exe --config E:\MongoDB2.6\mongodinst2.cfg
这3个成功实例化(在端口2021,2022,2023上运行)。 现在我使用mongos命令进行这三个实例的聚类,我的命令就像这样
mongos.exe --configdb 127.0.0.1:2021,127.0.0.1:2022,127.0.0.1:2023
它正在成功同步三个mongodb实例。现在我连接到端口27017上的mongos实例并创建分片
sh.addShard("127.0.0.1:2021")
sh.addShard("127.0.0.1:2022")
sh.addShard("127.0.0.1:2023")
这个过程也很成功。在mongos实例(27017)之后,我创建了一个db(myshard)和集合(mycoll)。
现在我将数据插入此集合中:
db.myshard.insert([
...
{
title: 'NoSQL Database',
description: 'NoSQL database doesn',
by: 'tutorials point',
url: 'http://www.tutorialspoint.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 20,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2013,11,10,2,35),
like: 0
}
]
},
...
])
现在它在我在端口2021上运行的其中一个实例上反映了这些值,但在其他实例上没有反映这些值,如2022和2023端口。
我是mongodb的新手而不理解为什么会这样发生。有人可以解释一下这种行为吗?
答案 0 :(得分:3)
基本上,这里发生的是分片群集根据您的分片键决定使用哪个分片(默认为_id
)。您不一定要提前知道将使用哪个分片以及文档的存储位置。
这个“问题”由mongos和配置服务器处理。配置服务器包含有关群集的元信息,例如,数据位于分片群集中的位置。
为了利用分片机制,所有查询都应在mongos
shell 上执行。这是您可以用来从任何分片中提取任何数据的唯一方法。 mongos shell将根据配置服务器包含的元信息查询数据库和集合。