zoukankan      html  css  js  c++  java
  • mongodb 学习笔记 09 -- shard分片

    概述

         shard 分片 就是 把不同的数据分在不同的server

    模型

    这里写图片描写叙述

    当中:
        用户对mongodb的操作都是向mongs请求的
        configsvr 用于保存,某条数据保存在哪个shard的上

    怎样使用分片

    先启动2个节点作为shard

    mongd --dbpath ~/db/mongo1/databse --logpath ~/db/mongo1/log/mongo.log --port 27017 --fork --smallfiles
    mongd --dbpath ~/db/mongo2/databse --logpath ~/db/mongo2/log/mongo.log --port 27018 --fork --smallfiles
    

    启动 configsvr。就是比前面的多加了 –configsvr

    mongd --dbpath ~/db/mongo3/databse --logpath ~/db/mongo3/log/mongo.log --port 27019 --fork --smallfiles --configsvr
    

    启动mongos,注意–configdb 指定configsvr

    mongos --logpath ~/db/mongo4/log/mongs.log --port 27020  --configdb 127.0.0.1:27020 --fork
    

    连到mongos

    mongo --port 27020
    

    把前面执行的2个节点,加入进来

    sh.addShard("127.0.0.1:27017")
    sh.addShard("127.0.0.1:27018")
    

    查看状态

    sh.status()
    

    定义分片规则:比方 先声明test库能够分片,然后定义根据my表的my_id来分片

    sh.enableSharding('test')
    sh.shardCollection('test.my',{'my_id':1})
    

    分片原理
        n篇文档,形成一个“chunk”,先放到某个shard上,当这片shard的上的chunk数。比其他shard上的chunk数差别大时,就移动chunk到还有一个shard上。

    改动chunk的大小:比方改动到4m
    默认某个chunk的大小是64m

    use config
    db.setting.save({_id:'chunksize',value:4m})
    

    手动预先分片

    前面的分片方法中,根据chunk数来分片,这样会带来影响IO的问题。
    能够手动预制分片。比如定义my_id 0~1000 放在shard1中,1001~2000 放在shard2中,2001~3000 中放在shard3中

    sh.enableSharding('test')
    sh.shardCollection('test.my',{'my_id':1})
    sh.splitAt('my',{my_id:1000})
    sh.splitAt('my',{my_id:2000})
    sh.splitAt('my',{my_id:3000})
    
  • 相关阅读:
    Android
    Android
    Android
    Android
    Android
    【工作中学习】CreateProcessAsUser失败,错误码:1314
    【Angular JS】网站使用社会化评论插件,以及过程中碰到的坑
    【Angular JS】正确调用JQuery与Angular JS脚本
    【工作】Proxy Server的优化
    AWS ELB Sticky Session有问题?别忘了AWSELB cookie
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5229929.html
Copyright © 2011-2022 走看看