JSON

MongoDb学习笔记(2)

字号+ 作者:H5之家 来源:H5之家 2016-10-30 12:00 我要评论( )

./mongod --args --auth 添加用户(表级) use admindb.addUser('sa', 'root' false); // 超级管理员use testdb.addUser('web', 'web123', true); // 添加表的账号 修改密码 db.changeUserPassword('web','web321');

./mongod --args --auth

添加用户(表级) use admin db.addUser('sa', 'root' false); // 超级管理员 use test db.addUser('web', 'web123', true); // 添加表的账号 修改密码 db.changeUserPassword('web','web321'); 删除用户 db.removeUser('web'); 认证 db.auth('sa','passwd'); 用户角色

(略) 详细请查看

导出与导入(备份与恢复) 导出 mongoexport

-h host

-port 端口

-u 用户名

-p 密码

-d 库名

-c 表名 collection

-f 列名

-o 导出的文件名

-q 查询条件

--csv 导出csv格式文件 (便于和传统数据库交换数据)

./bin/mongoexport -d test -c stu -f sn,name -q'{sn:{$lte:1000}}' -o ./test.stu.json 导入 mongoimport -d 待导入的数据库 -c 待带入的表 --type 导入格式 --file 带入的文件 ./bin/mongoimport -d test -c animal --type json --file ./test.stu.json ./bin/mongoimport -d test -c bird --type csv -f sn,name --headerline --file ./test.stu.csv 二进制导入导出 mongodump 导出二进制bson结构的数据及其索引文件,默认放在mongo 的dump目录下面 导出文件为 a.bson(数据文件) a.metadata.json(描述文件) -d 库名 -c 表名 -f field1,field2...列名 不声明表名会导出所有的库和表 mongorestore

数据与索引全回复

./bin/mongorestore -d test --directoryperdb dump/test replication set 复制集 replication set 多台服务器维护相同的数据副本,提高服务器的高可用性 原理

类似mysql的读写分离

启动 --replSet rs2 // 建立复制集 ./bin/mongod --dbpath /home/m17 --logpath /home/mlog/m17.log --fork --port 27017 --replSet rs2 (--smallfiles) ./bin/mongod --dbpath /home/m18 --logpath /home/mlog/m18.log --fork --port 27018 --replSet rs2 (--smallfiles) ./bin/mongod --dbpath /home/m19 --logpath /home/mlog/m19.log --fork --port 27019 --replSet rs2 (--smallfiles)

三个实例都属于相同的复制集

配置 use admin var rsconf = { _id:'rs2', // 复制集名称 //复制集成员 members:[ { _id:0, // id 为 0 的默认为primary host:'192.168.1.202:27017' }, { _id:1, host:'192.168.1.202:27018' }, { _id:2, host:'192.168.1.202:27019' } ] } // 初始化 rs.initiate(rsconf) rs.status(); rs.conf();

添加,删除节点:

rs.remove('192.168.1.202.27019') rs.reconfig(rsconf) // reconf 包含需要加上的实例 主从一致

从服务器默认不允许读写

在从服务器中执行 rs.slaveOk(); 即可读取数据

primary 服务器挂掉之后,MongoDb 会将从服务器中的一个设置为 primary 服务器

shard 分片

将数据分到不同的服务器上面

mongos 路由器

configsvr 不存储真正的数据,只存储meta信息,及"某条数据在那个分片上"的信息 mongos查询某条数据时,先从configsvr查找数据在那个分片上面,再从shard上面取出.

分片有如下要素 要有大于二的mongod服务做片节点 要有 configsvr 维护 meta 信息 要启动 mongos 做路由器 要设定好数据的分片规则 (configsvr 才能维护) 启动 configsvr

启动时加上参数 --configsvr

启动 mongos 路由器 ./bin/mongos --logpath /home/mlog/m30.log --fork --port 30000 --configdb 192.168.1.202.27020 // 设置 configsvr 服务器 ./bin/mongo --port 30000 // 连接到 mongos 路由器 sh.addShard('192.168.1.202:27017'); // 增加片节点 sh.addShard('192.168.1.202:27018'); // 增加片节点 sh.status() // 查看节点信息 数据分片规则 sh.enableSharding('shop'); // 启用分片的库 sh.shardCollection('shop.goods', {field :1}); // 启用分片的表 field 为 shard key 一般为主键

mongodb 不是从单篇文档的级别,绝对平均的散落在各个片上.

而是N篇文档,形成一个块"chunk",优先放在某个片上 当这个片上的chunk,比另一个片的chunk,区别比较大时,(>=3),会把本片上的chunk,移到另一个片上,以chunk为单位,维护片之间的数据平衡;

chunk的默认大小为64M

// 修改chunk的默认大小 use config db.setting.save({_id:'chunksize'},{$set:{value:4}}) 一个片chunk过多,就会将chunk移动到另外一个片上面.频繁的chunk移动,会带来较大的服务器IO负担

解决方法:手动预先分片

手动预先分片 monngos> sh.shardCollection('shop.user, {userid:1}'); // 启用分片的集合,用 userid 做 shard key for (var i = 1; i <= 40000; i++) { sh.splitAt('shop.user',{userid:i*1000}); // 分了40个块 } 预先分块, 插入数据的时候自动用 userid 生成chunk(全是空的),已经分好的块,不会来回移动.但是不能修改 分片与 replication set 结合

将每个 replication 都当做是一个片就ok

mongos> sh.addShard('rs3/192.168.1.203:27017'); sh.addShard('repName/IP:PORT');

Example { name:'wukong', jingu:true, sex:'m', age:500 } { $set:{name:'dzsf(斗战圣佛)'}, $unset:{jingu:1}, $rename:{sex:'gender'}, $inc:{age:1} } # 取出不属于3和11的栏目 $and 实现 db.goods.find( { $and: [ { cat_id{$ne:3} }, { cat_id{$ne:11} } ] } ); $nin 实现 db.goods.find( { cat_id{$nin:[3,11]} }, { cat_id:1, goods_name:1, _id:0 } ); $nor 实现 db.goods.find( { $nor: [ {cat_id:3}, {cat_id:11} ] }, { cat_id:1, goods_name:1, _id:0 } ); // 子文档索引 db.shop.insert( { name:'Nokia', spc:{ weight:120, area:'taiwan' } } ); db.shop.find( {'spc.area':'taiwan'} ); db.shop.ensureIndex('spc.area':1);

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • NuclearAtk 网络安全研究中心

    NuclearAtk 网络安全研究中心

    2015-11-24 10:53

  • 最严肃的安全原创平台

    最严肃的安全原创平台

    2015-10-14 15:41

网友点评