zoukankan      html  css  js  c++  java
  • (11)mongodb 手动分片

      上一篇讲到了 mongodb 的 自动分片,自动分片遇到一个问题,就是 chunk 在不同服务器之间来回移动,增加了服务器的 IO,为了解决这个问题可以采用手动提前分片。顾名思义,手动分片就是在 mongodb 分片应用搭建好的时候就提前规定好每个片有多少 chunk ,什么数据分配到哪个 chunk 里面。一定要提前规划好,后期将不再变动。下面假设总共分40个chunk。

    mongos> sh.shardCollection('shop.user',{userid:1});  以shop库的user表为例,根据userid分片存储。

    mongos> sh.status();  查看一下分片集的状态,截图如下:

    可以看到user表已经添加到分片中了。下面开始分块,把两个片分成40块,user表中的userid每遇到1k、2k、3k、... ... 40k就写入到所属的块中。

    for(var i=1;i<=40;i++){sh.splitAt('shop.user',{userid:i*1000})}  分块语句

    执行一下 sh.status(); 查看当前分片集的状态,截图如下:

    可以看到两个片平均分成了41个chunk,shard0001分了20个chunk,shard0000 分了21个 chunk ,还没有写入数据 chunk 就已经分好了。下面写入数据:

    mongos> for(var i=1;i<=40000;i++){db.user.insert({userid:i,name:'asfafvg favagf feer ewer fffafff'})}
    mongos> db.user.find().count();
    40000

    总共写入4w条数据,分别登陆 27017 服务器和 27018 服务器查看数据量;

    登陆 27017:

    > db.user.find().count();
    20001

    登陆 27018:

    > db.user.find().count();
    19999

    可以看到已经实现了数据的平均分布。

  • 相关阅读:
    Build a pile of Cubes
    一键升级所有pip过期库
    AWGN
    调制详解——待完善
    BASK、BFSK、BPSK调制方法的Matlab程序实现
    tomcat运行问题解决方法
    ehcache简单使用
    MySQL 数据库中用户表中口令登陆设置
    和自己赛跑的人
    中文词频统计
  • 原文地址:https://www.cnblogs.com/javasl/p/11299384.html
Copyright © 2011-2022 走看看