我正在尝试建立 MongoDB 集群,已经拥有了 1 个配置服务器,1 个查询路由器和 2 个 mongod 实例。以下是我设置集群的脚本:
mongod --configsvr --port 27010 --dbpath ~/mongodb/data1
mongos -configdb localhost:27010 --port 27011
mongod --port 27012 --dbpath ~/mongodb/data2
mongod --port 27013 --dbpath ~/mongodb/data3
sh.addShard("localhost:27012")
sh.addShard("localhost:27013")
sh.enableSharding("tags")
db.tweets.ensureIndex( { _id : "hashed" } )
sh.shardCollection("tags.tweets", { "_id": "hashed" } )
为了插入数据,我正在使用以下脚本。
connection = pymongo.MongoClient("mongodb://localhost:27011")
db=connection.tags
tweets = db.tweets
def main(jsonfile):
f = open(jsonfile)
for line in f.readlines():
try:
tweet_dict = json.loads(line)
result = tweets.insert_one(tweet_dict)
print result.inserted_id
except Exception as e:
print "Unexpected error:", type(e), e
sys.exit()
为什么我尝试插入的推文会被分片,而我尝试插入的所有推文也都存储在查询路由器中?这种行为是预期的吗?
集群的整个目的是横向扩展(即推文在机器之间分散),因此所有推文都累积在查询路由器中似乎不合常理?
有人能解释为什么会这样吗?为什么查询路由器有我插入的所有推文?