mongo数据库的管理

数据的导入、导出、备份、恢复

以下涉及到到的数据库以mydb为例,表以user为例:
  • 数据导出
    ->./mongoexport -d mydb -c user -o user.dat
  • 导出csv格式(-f 后面指定导出列)
    ->./mongoexport -d mydb -c user -f uid,username,age -o user_csv.dat
  • 导入json格式
    ->./mongoimport -d mydb -c user user.dat
  • 导入csv格式( headerline挑明不导入第一行,因为第一行是列名)
    ->./mongoimport -d mydb -c user --type csv --headerline --file user_csv.dat
  • 数据备份(默认备份在当前目录下新建的dump目录中)
    ->./mongodump -d mydb
  • 数据备份(指定目录)
    ->./mongodump -d mydb -o mydb_dump
  • 数据恢复
    ->./mongorestore -d mydb mydb_dump/*

访问控制

  • 绑定内网ip和设置监听端口,在启动mongo数据库时指定
    ->./mongod --bind_ip 192.168.1.1 --port 28018
    访问需要指定ip和端口 ,不然会报错:->./mongo 192.168.1.1:28018
  • 使用用户名和密码登录(如果在admin中没有添加用户是默认直接访问的)
    ->./mongo
    >db.addUser("root","111")
    >db.auth("root","111")
    然后再访问就需要指定用户了->./mongo -u root -p

命令行操作

  • 通过eval参数执行语句
    ->./mongo mydb --eval "printjson(db.user.count())"
  • 执行文件中的内容
    user_count.js文件内容:var totalcount=db.user.count(); printjson('Total count of user is: ' + totalcount())
    执行user_count.js文件->./mongo mydb user_count.js

进程控制

  • 查看活动进程
    >db.currentOp();
  • 结束进程
    >db.killOp(1234/*opid*/)

索引创建和使用(1:升序,-1:降序)

  • 单个索引
    >db.user.ensureIndex({age:1})
    >db.user.getIndexes();
  • 文档索引
    >db.user.insert({name:"Tom",addr:{city:"Wuhan",state:"WH"}})
    在addr上创建索引>db.user.ensureIndex({addr:1})
    >db.user.find({addr:{city:"Wuhan",state:"WH"}}),此查询不会用到索引,因为查询的顺序和索引建立的顺序不一样
  • 组合索引
    db.user.ensureIndex({addr.city:1,addr.state:1})
    下面操作都会用到此索引
    db.user.find({addr.city:"Wuhan",addr.state:"WH"})
    db.user.find({addr.city:"Wuhan"})
    db.user.find().sort({addr.city:1,addr.state:1})
    db.user.find().sort({addr.city:1})
  • 唯一索引
    >db.user.insert({name:"Lily",age:18})
    >db.user.insert({name:"Lily",age:18})
    >db.user.ensureIndex({name:1,age:1},{unique:true}); 创建时会报错,原因是表中有两条一模一样的数据
  • 删除索引
    >db.user.dropIndexes()
    >db.user.dropIndex({age:1}); 删除指定字段的索引

性能优化

-创建索引
如果需要读取的数据量很大,在查询条件的字段上或者排序条件的字段上创建索引,可以显著提高执行效率

  • 限定返回结果条数
    使用limit()限定返回结果集的大小,可以减少程序运行的资源消耗以及减少网络传输数量
  • 只查询用到的字段,不查询所有字段
    只查询需要用到的字段比查询所有字段效率更高
  • 采用 capped collection
    1. 固定大小,Capped Collections必须事先创建,并设置大小:>db.createCollection("mycoll", {capped:true, size:100000})
    2. Capped Collections 可以insert和update操作,不能delete操作,只能用drop()方法删除整个Collection
    3. 默认基于insert的次序排序的。如果查询时没有排序,则总是按照insert的顺序返回
    4. FIFO。如果超过了Collection的限定大小,则用FIFO算法,新纪录将代替最先insert的记录
  • 采用Server Side Code Execution
    Server-Side Processing 类似于SQL数据库的存储过程
  • Hint可以强制要求查询操作使用某个索引
    如果要查询多个字段的值,如果在其中一个字段上有索引,可以使用hint ,>db.collection.find({user:u, foo:d}).hint({user:1})
    -采用Profiling
    Profiling使用的是system.profile来记录,而system.profile是一个capped collection,这种collection在操作上有一些限制和特点,但是效率更高
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值