<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>运达&#039;s  blog &#187; Mongodb</title>
	<atom:link href="https://www.yunda51.com/?cat=153&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://www.yunda51.com</link>
	<description>运达的博客</description>
	<lastBuildDate>Wed, 12 Nov 2025 07:58:26 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0.19</generator>
	<item>
		<title>Mongodb安装及常用命令</title>
		<link>https://www.yunda51.com/?p=1821</link>
		<comments>https://www.yunda51.com/?p=1821#comments</comments>
		<pubDate>Tue, 26 Sep 2017 06:14:39 +0000</pubDate>
		<dc:creator><![CDATA[运达]]></dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mongodb]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[mongodb]]></category>

		<guid isPermaLink="false">http://www.yunda51.com/?p=1821</guid>
		<description><![CDATA[mongodb的安装： 1、安装包存放目录： /app/tool/ 2、软件安装目录：/app/soft/ 1<a href="https://www.yunda51.com/?p=1821" class="read-more">Continue Reading</a>]]></description>
				<content:encoded><![CDATA[<p><strong>mongodb的安装：</strong><br />
1、安装包存放目录： /app/tool/<br />
2、软件安装目录：/app/soft/</p>
<pre class="wp-code-highlight prettyprint">
1: 下载mongodb www.mongodb.org  下载最新的stable版
2: 解压文件:tar zxvf mongodb-linux-x86_64-rhel70-3.4.9.tgz
3: 不用编译,本身就是编译后的二进制可执行文件.
4: 启动mongod服务
./bin/mongod --dbpath /mongodata/mdata/ --logpath /mongodata/mlog --fork --port 27017
参数解释:
--dbpath 数据存储目录
--logpath 日志存储目录
--port 运行端口(默认27017)
--fork 后台进程运行

5：开启你的mongodb：
/app/soft/mongodb3.4.9/bin/mongo 
或者进入到mongodb3.4.9 执行：./bin/mongo 也是可以的
</pre>
<p><strong>1: mongo入门命令</strong></p>
<pre class="wp-code-highlight prettyprint">
1.1: show dbs  查看当前的数据库
1.2 use databaseName 选库
1.2 show tables/collections 查看当前库下的collection

1.3 如何创建库?
Mongodb的库是隐式创建,你可以use 一个不存在的库
然后在该库下创建collection,即可创建库

1.4 db.createCollection(‘collectionName’)  
创建collection

1.5 collection允许隐式创建
Db.collectionName.insert(document);

1.6 db.collectionName.drop() ,
删除collection

1.7 db.dropDatabase();
删除database
</pre>
<p><strong>基本操作增删改查</strong><br />
增: insert</p>
<pre class="wp-code-highlight prettyprint">
介绍: mongodb存储的是文档,. 文档是json格式的对象.

语法: db.collectionName.isnert(document);

1: 增加单篇文档
Db.collectionName.insert({title:’nice day’});

2: 增加单个文档,并指定_id
Db.collectionName.insert({_id:8,age:78,name:’lisi’});

3.增加多个文档
db.collectionName.insert(
[
{time:&#039;friday&#039;,study:&#039;mongodb&#039;},
{_id:9,gender:&#039;male&#039;,name:&#039;QQ&#039;}
]
)
</pre>
<p>删:remove</p>
<pre class="wp-code-highlight prettyprint">
语法: db.collection.remove(查询表达式, 选项);
选项是指  {justOne:true/false},是否只删一行, 默认为false

注意
1: 查询表达式依然是个json对象
2: 查询表达式匹配的行,将被删掉.
3: 如果不写查询表达式,collections中的所有文档将被删掉.

例1: db.stu.remove({sn:’001’});
删除stu表中 sn属性值为’001’的文档 

例2: db.stu.remove({gender:’m’,true});
删除stu表中gender属性为m的文档,只删除1行.
</pre>
<p>改  update操作<br />
改谁? --- 查询表达式<br />
改成什么样? -- 新值 或 赋值表达式<br />
操作选项 ----- 可选参数</p>
<pre class="wp-code-highlight prettyprint">
语法: db.collection.update(查询表达式,新值,选项);
例:
db.news.update({name:&#039;QQ&#039;},{name:&#039;MSN&#039;});
是指选中news表中,name值为QQ的文档,并把其文档值改为{name:’MSN’},
结果: 文档中的其他列也不见了,改后只有_id和name列了.
即--新文档直接替换了旧文档,而不是修改

如果是想修改文档的某列,可以用$set关键字
db.collectionName.update(query,{$set:{name:’QQ’}})

修改时的赋值表达式
$set  修改某列的值
$unset 删除某个列
$rename 重命名某个列
$inc 增长某个列
$setOnInsert 当upsert为true时,并且发生了insert操作时,可以补充的字段.


Option的作用:
{upsert:true/false,multi:true/false}
Upsert---是指没有匹配的行,则直接插入该行.(和mysql中的replace一样)

例:db.stu.update({name:&#039;wuyong&#039;},{$set:{name:&#039;junshiwuyong&#039;}},{upsert:true});
如果有name=’wuyong’的文档,将被修改
如果没有,将添加此新文档



例:
db.news.update({_id:99},{x:123,y:234},{upsert:true});
没有_id=99的文档被修改,因此直接插入该文档

multi: 是指修改多行(即使查询表达式命中多行,默认也只改1行,如果想改多行,可以用此选项)
例:
db.news.update({age:21},{$set:{age:22}},{multi:true});
则把news中所有age=21的文档,都修改


查: find, findOne
语法: db.collection.find(查询表达式,查询的列);
Db.collections.find(表达式,{列1:1,列2:1});


例1:db.stu.find()
查询所有文档 所有内容

例2: db.stu.find({},{gendre:1})
查询所有文档,的gender属性 (_id属性默认总是查出来)

例3: db.stu.find({},{gender:1, _id:0})
查询所有文档的gender属性,且不查询_id属性

例3: db.stu.find({gender:’male’},{name:1,_id:0});
查询所有gender属性值为male的文档中的name属性
</pre>
<p><strong>查询表达式:</strong></p>
<pre class="wp-code-highlight prettyprint">
1: 最简单的查询表达式
{filed:value} ,是指查询field列的值为value的文档

2: $ne --- != 查询表达式
{field:{$nq:value}}
作用--查filed列的值 不等于 value 的文档

3: $nin --&gt; not in

4: $all
语法: {field:{$all:[v1,v2..]}} 
是指取出 field列是一个数组,且至少包含 v1,v2值

5: $exists 
语法: {field:{$exists:1}}
作用: 查询出含有field字段的文档

6: $nor,
{$nor,[条件1,条件2]}
是指  所有条件都不满足的文档为真返回


7:用正则表达式查询 以”诺基亚”开头的商品
例:db.goods.find({goods_name:/诺基亚.*/},{goods_name:1});

8: 用$where表达式来查询
例: db.goods.find({$where:&#039;this.cat_id != 3 &amp;&amp; this.cat_id != 11&#039;});

注意: 用$where查询时, mongodb是把bson结构的二进制数据转换为json结构的对象,
然后比较对象的属性是否满足表达式.

</pre>
<p>Update时可用的操作符<br />
例:</p>
<pre class="wp-code-highlight prettyprint">
-&gt;db.user.insert({name:&#039;lisi&#039;,age:12,sex:&#039;male&#039;,height:123,area:&#039;haidian&#039;});
-&gt;db.user.update({name:&#039;lisi&#039;},{$set:{area:&#039;chaoyang&#039;},$unset:{height:1},$inc:{age:1},$rename:{sex:&#039;gender&#039;}});
&gt; db.user.find();
{ &quot;_id&quot; : ObjectId(&quot;51fc01c4f5de93e1f2856e33&quot;), &quot;age&quot; : 13, &quot;area&quot; : &quot;chaoyang&quot;, &quot;gender&quot; : &quot;male&quot;, &quot;name&quot; : &quot;lisi&quot; }

$setOnInsert -&gt;相当于mysql中的列的默认值
</pre>
<p><strong>游标操作cursor</strong></p>
<p>游标是什么\?<br />
通俗的说,游标不是查询结果,而是查询的返回资源,或者接口.<br />
通过这个接口,你可以逐条读取.<br />
就像php中的fopen打开文件,得到一个资源一样, 通过资源,可以一行一行的读文件.</p>
<p>声明游标:</p>
<pre class="wp-code-highlight prettyprint">
var cursor =  db.collectioName.find(query,projection);
Cursor.hasNext() ,判断游标是否已经取到尽头
Cursor. Next() , 取出游标的下1个单元

用while来循环游标
&gt; var mycursor = db.bar.find({_id:{$lte:5}})
&gt; while(mycursor.hasNext()) {
... printjson(mycursor.next());
... }
</pre>
<p>例:</p>
<pre class="wp-code-highlight prettyprint">
// 声明游标
var cursor = db.goods.find();
// 循环游标
for(var doc=true;cursor.hasNext();) { printjson(cursor.next());}

也可以简写:
for(var  cursor=db.goods.find(), doc=true;cursor.hasNext();) { printjson(cursor.next());}


游标还有一个迭代函数,允许我们自定义回调函数来逐个处理每个单元.
cursor.forEach(回调函数);
例:
&gt; var gettitle = function(obj) {print(obj.goods_name)}
&gt; var cursor = db.goods.find();
&gt; cursor.forEach(gettitle);


游标在分页中的应用
比如查到10000行,跳过100页,取10行.
一般地,我们假设每页N行, 当前是page页
就需要跳过前 (page-1)*N 行, 再取N行, 在mysql中, limit offset,N来实现
在mongo中,用skip(), limit()函数来实现的

如 var mycursor = db.bar.find().skip(9995);
则是查询结果中,跳过前9995行

查询第901页,每页10条
则是 var mytcursor = db.bar.find().skip(9000).limit(10);


通过cursor一次性得到所有数据, 并返回数组.
例:
&gt;var cursor = db.goods.find();
&gt; printjson(cursor.toArray());  //看到所有行
&gt; printjson(cursor.toArray()[2]);  //看到第2行

注意: 不要随意使用toArray()
原因: 会把所有的行立即以对象形式组织在内存里.
可以在取出少数几行时,用此功能.
</pre>
<p><strong>索引创建</strong></p>
<p>1:索引提高查询速度,降低写入速度,权衡常用的查询字段,不必在太多列上建索引<br />
2.在mongodb中,索引可以按字段升序/降序来创建,便于排序<br />
3.默认是用btree来组织索引文件,2.4版本以后,也允许建立hash索引.</p>
<p>查看查询计划</p>
<pre class="wp-code-highlight prettyprint">
db.find(query).explain();
&quot;cursor&quot; : &quot;BasicCursor&quot;, ----说明没有索引发挥作用
&quot;nscannedObjects&quot; : 1000 ---理论上要扫描多少行
cursor&quot; : &quot;BtreeCursor sn_1&quot;, 用到的btree索引
</pre>
<p>常用命令:</p>
<pre class="wp-code-highlight prettyprint">
查看当前索引状态: db.collection.getIndexes();

创建普通的单列索引:db.collection.ensureIndex({field:1/-1});  1是升续 2是降续

删除单个索引
db.collection.dropIndex({filed:1/-1});

一下删除所有索引
db.collection.dropIndexes();

创建多列索引  db.collection.ensureIndex({field1:1/-1, field2:1/-1});

创建子文档索引
db.collection.ensureIndex({filed.subfield:1/-1});


创建唯一索引:
db.collection.ensureIndex({filed.subfield:1/-1}, {unique:true});
</pre>
<p>创建稀疏索引:<br />
稀疏索引的特点------如果针对field做索引,针对不含field列的文档,将不建立索引.<br />
与之相对,普通索引,会把该文档的field列的值认为NULL,并建索引.<br />
适宜于: 小部分文档含有某列时.</p>
<pre class="wp-code-highlight prettyprint">
db.collection.ensureIndex({field:1/-1},{sparse:true});

&gt; db.tea.find();
{ &quot;_id&quot; : ObjectId(&quot;5275f99b87437c610023597b&quot;), &quot;email&quot; : &quot;a@163.com&quot; }
{ &quot;_id&quot; : ObjectId(&quot;5275f99e87437c610023597c&quot;), &quot;email&quot; : &quot;b@163.com&quot; }
{ &quot;_id&quot; : ObjectId(&quot;5275f9e887437c610023597e&quot;), &quot;email&quot; : &quot;c@163.com&quot; }
{ &quot;_id&quot; : ObjectId(&quot;5275fa3887437c6100235980&quot;) }
</pre>
<p>如上内容,最后一行没有email列,<br />
如果分别加普通索引,和稀疏索引,<br />
对于最后一行的email分别当成null 和 忽略最后一行来处理.<br />
根据{email:null}来查询,前者能查到,而稀疏索引查不到最后一行.</p>
<p>创建哈希索引(2.4新增的)<br />
哈希索引速度比普通索引快,但是,无能对范围查询进行优化.<br />
适宜于---随机性强的散列<br />
db.collection.ensureIndex({file:’hashed’});</p>
<p>重建索引<br />
一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此.<br />
可以通过索引的重建,减少索引文件碎片,并提高索引的效率.<br />
类似mysql中的optimize table</p>
<p>db.collection.reIndex()</p>
<p><strong>Mongodb导出与导入</strong></p>
<p>1: 导入/导出可以操作的是本地的mongodb服务器,也可以是远程的.<br />
所以,都有如下通用选项:</p>
<pre class="wp-code-highlight prettyprint">
-h host   主机
--port port    端口
-u username 用户名
-p passwd   密码

</pre>
<p>2: mongoexport 导出json格式的文件<br />
问: 导出哪个库,哪张表,哪几列,哪几行?</p>
<pre class="wp-code-highlight prettyprint">
-d  库名
-c  表名
-f  field1,field2...列名
-q  查询条件
-o  导出的文件名
-- csv  导出csv格式(便于和传统数据库交换数据)
</pre>
<p>例:</p>
<pre class="wp-code-highlight prettyprint">
[root@localhost mongodb]# ./bin/mongoexport -d test -c news -o test.json
connected to: 127.0.0.1
exported 3 records
[root@localhost mongodb]# ls
bin  dump  GNU-AGPL-3.0  README  test.json  THIRD-PARTY-NOTICES
[root@localhost mongodb]# more test.json 
{ &quot;_id&quot; : { &quot;$oid&quot; : &quot;51fc59c9fecc28d8316cfc03&quot; }, &quot;title&quot; : &quot;aaaa&quot; }
{ &quot;_id&quot; : { &quot;$oid&quot; : &quot;51fcaa3c5eed52c903a91837&quot; }, &quot;title&quot; : &quot;today is sataday&quot; }
{ &quot;_id&quot; : { &quot;$oid&quot; : &quot;51fcaa445eed52c903a91838&quot; }, &quot;title&quot; : &quot;ok now&quot; }
</pre>
<p>例2: 只导出goods_id,goods_name列</p>
<pre class="wp-code-highlight prettyprint">
./bin/mongoexport -d test -c goods -f goods_id,goods_name -o goods.json
</pre>
<p>例3: 只导出价格低于1000元的行</p>
<pre class="wp-code-highlight prettyprint">
./bin/mongoexport -d test -c goods -f goods_id,goods_name,shop_price -q ‘{shop_price:{$lt:200}}’ -o goods.json
</pre>
<p>注: _id列总是导出</p>
<p><strong>Mongoimport 导入</strong></p>
<pre class="wp-code-highlight prettyprint">
-d 待导入的数据库
-c 待导入的表(不存在会自己创建)
--type  csv/json(默认)
--file 备份文件路径
</pre>
<pre class="wp-code-highlight prettyprint">
例1: 导入json
./bin/mongoimport -d test -c goods --file ./goodsall.json

例2: 导入csv
./bin/mongoimport -d test -c goods --type csv -f goods_id,goods_name --file ./goodsall.csv 

./bin/mongoimport -d test -c goods --type csv --headline -f goods_id,goods_name --file ./goodsall.csv 

</pre>
<p>mongodump 导出二进制bson结构的数据及其索引信息</p>
<pre class="wp-code-highlight prettyprint">
-d  库名
-c  表名
-f  field1,field2...列名
</pre>
<p>例: </p>
<pre class="wp-code-highlight prettyprint">
mongodum -d test  [-c 表名]  默认是导出到mongo下的dump目录
</pre>
<p>规律:<br />
1:导出的文件放在以database命名的目录下<br />
2: 每个表导出2个文件,分别是bson结构的数据文件, json的索引信息<br />
3: 如果不声明表名, 导出所有的表</p>
<p>mongorestore 导入二进制文件<br />
例:</p>
<pre class="wp-code-highlight prettyprint">
 ./bin/mongorestore -d test --directoryperdb dump/test/ (mongodump时的备份目录)
</pre>
<p>二进制备份,不仅可以备份数据,还可以备份索引,<br />
备份数据比较小.</p>
<p>mongodb的用户管理</p>
<p>注意:<br />
A)在mongodb中,有一个admin数据库, 牵涉到服务器配置层面的操作,需要先切换到admin数据.<br />
即 use admin , -->相当于进入超级用户管理模式.</p>
<p>B)mongo的用户是以数据库为单位来建立的, 每个数据库有自己的管理员.</p>
<p>C) 我们在设置用户时,需要先在admin数据库下建立管理员---这个管理员登陆后,相当于超级管理员.</p>
<p>0: 查看用户</p>
<p>1: 添加用户<br />
命令:db.addUser();<br />
简单参数: db.addUser(用户名,密码,是否只读)</p>
<p>注意: 添加用户后,我们再次退出并登陆,发现依然可以直接读数据库?<br />
原因: mongodb服务器启动时, 默认不是需要认证的.<br />
要让用户生效, 需要启动服务器时,就指定 --auth 选项.<br />
这样, 操作时,就需要认证了.</p>
<p>例: </p>
<pre class="wp-code-highlight prettyprint">
1: 添加用户
&gt; use admin
&gt; db.addUser(‘sa’,’sa’,false);

2: 认证
&gt; use test
&gt; db.auth(用户名,密码);

3: 修改用户密码
&gt; use test
&gt; db.changeUserPassword(用户名, 新密码);

3:删除用户
&gt; use test
&gt; db.removeUser(用户名);
</pre>
<p>注: 如果需要给用户添加更多的权限,可以用json结构来传递用户参数<br />
例:</p>
<pre class="wp-code-highlight prettyprint">
&gt; use test
&gt;db.addUser({user:&#039;guan&#039;,pwd:&#039;111111&#039;,roles:[&#039;readWrite,dbAdmin&#039;]});

replication set复制集
replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性.
</pre>
<p><strong>Replication set 设置全过程</strong><br />
0:创建目录
<pre class="wp-code-highlight prettyprint">

mkdir -p /data/r0 /data/r1 /data/r2
</pre>
<p>1:启动3个实例,且声明实例属于某复制集</p>
<pre class="wp-code-highlight prettyprint">
./bin/mongod --port 27017 --dbpath /data/r0 --smallfiles --replSet rsa --fork --logpath /var/log/mongo17.log
./bin/mongod --port 27018 --dbpath /data/r1 --smallfiles --replSet rsa --fork --logpath /var/log/mongo18.log
./bin/mongod --port 27019 --dbpath /data/r2 --smallfiles --replSet rsa --fork --logpath /var/log/mongo19.log

</pre>
<p>2:配置</p>
<pre class="wp-code-highlight prettyprint">
rsconf = {
    _id:&#039;rsa&#039;,
    members:
    [
        {_id:0,
        host:&#039;192.168.1.201:27017&#039;
        }
    ]
}

</pre>
<p>3: 根据配置做初始化</p>
<pre class="wp-code-highlight prettyprint">
rs.initiate(rsconf);
</pre>
<p>4: 添加节点</p>
<pre class="wp-code-highlight prettyprint">
rs.add(&#039;192.168.1.201:27018&#039;);
rs.add(&#039;192.168.1.201:27019&#039;);
</pre>
<p>5:查看状态</p>
<pre class="wp-code-highlight prettyprint">
rs.status();
</pre>
<p>6:删除节点</p>
<pre class="wp-code-highlight prettyprint">
rs.remove(&#039;192.168.1.201:27019&#039;);
</pre>
<p>7:主节点插入数据</p>
<pre class="wp-code-highlight prettyprint">
&gt;use test
&gt;db.user.insert({uid:1,name:&#039;lily&#039;});
</pre>
<p>8:连接secondary查询同步情况</p>
<pre class="wp-code-highlight prettyprint">
./bin/mongo --port 27019
&gt;use test
&gt;show tables

rsa:SECONDARY&gt; show tables;
Sat Aug 17 16:03:55.786 JavaScript execution failed: error: { &quot;$err&quot; : &quot;not master and slaveOk=false&quot;, &quot;code&quot; : 13435 } 
</pre>
<p>8.1 出现上述错误,是因为slave默认不许读写</p>
<pre class="wp-code-highlight prettyprint">
&gt;rs.slaveOk();
&gt;show tables
</pre>
<p>#看到与primary 一致的数据</p>
<p><strong>分片：</strong></p>
<p>1:在3台独立服务器上,分别运行 27017,27018,27019实例, 互为副本集,形成3套repl set<br />
2: 在3台服务器上,各配置config server, 运行27020端口上</p>
<p>3: 配置mongos</p>
<pre class="wp-code-highlight prettyprint">
./bin/mongos --port 30000 \
 --dbconfig 192.168.1.201:27020,192.168.1.202:27020,192.168.1.203:27020
</pre>
<p>4:连接路由器</p>
<pre class="wp-code-highlight prettyprint">
./bin/mongo --port 30000
</pre>
<p>5: 添加repl set为片</p>
<pre class="wp-code-highlight prettyprint">
&gt;sh.addShard(‘192.168.1.201:27017’);
&gt;sh.addShard(‘192.168.1.203:27017’);
&gt;sh.addShard(‘192.168.1.203:27017’);
</pre>
<p>6: 添加待分片的库</p>
<pre class="wp-code-highlight prettyprint">
&gt;sh.enableSharding(databaseName);
</pre>
<p>7: 添加待分片的表</p>
<pre class="wp-code-highlight prettyprint">
&gt;sh.shardCollection(‘dbName.collectionName’,{field:1});
</pre>
<p>Field是collection的一个字段,系统将会利用filed的值,来计算应该分到哪一个片上.<br />
这个filed叫”片键”, shard key</p>
<p>mongodb不是从单篇文档的级别,绝对平均的散落在各个片上, </p>
<p>而是N篇文档,形成一个块"chunk",<br />
优先放在某个片上,<br />
当这片上的chunk,比另一个片的chunk,区别比较大时, (>=3) ,会把本片上的chunk,移到另一个片上, 以chunk为单位,<br />
维护片之间的数据均衡</p>
<p>问: 为什么插入了10万条数据,才2个chunk?<br />
答: 说明chunk比较大(默认是64M)<br />
在config数据库中,修改chunksize的值.</p>
<p>问: 既然优先往某个片上插入,当chunk失衡时,再移动chunk,<br />
自然,随着数据的增多,shard的实例之间,有chunk来回移动的现象,这将带来什么问题?<br />
答: 服务器之间IO的增加, </p>
<p>接上问: 能否我定义一个规则, 某N条数据形成1个块,预告分配M个chunk,<br />
M个chunk预告分配在不同片上.<br />
以后的数据直接入各自预分配好的chunk,不再来回移动?</p>
<p>答: 能, 手动预先分片!</p>
<p>以shop.user表为例</p>
<pre class="wp-code-highlight prettyprint">
1: sh.shardCollection(‘shop.user’,{userid:1}); //user表用userid做shard key
2: for(var i=1;i&lt;=40;i++) { sh.splitAt(&#039;shop.user&#039;,{userid:i*1000}) } // 预先在1K 2K...40K这样的界限切好chunk(虽然chunk是空的), 这些chunk将会均匀移动到各片上.
3: 通过mongos添加user数据. 数据会添加到预先分配好的chunk上, chunk就不会来回移动了.
</pre>
<p>转载请注明转自:<a href="http://www.yunda51.com">运达's blog</a> 原文地址：<a href="http://www.yunda51.com/1821.html">http://www.yunda51.com/1821.html</a></p>
]]></content:encoded>
			<wfw:commentRss>https://www.yunda51.com/?feed=rss2&#038;p=1821</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
