mongodb

mongoDB很火很强大,比较适合web2.0,高数据量,高压力,高可用,读写比例高,伸缩性需求强的环境。其缺点很也明显,事务支持弱,实时性弱(web应用完全可以接受),多表操作复杂。mongoDB使用文件存储数据,存储方式采用freelist方式。推荐使用64位机器做mongoDB服务器。

 

mongoDB中的元素分为:文档(行),集合(表),数据库(数据库)。

 

启动参数:

  • dbpath:数据库文件存放路径。
  • logpath:日志文件路径。
  • logappend:日志追加模式(默认是覆盖)。
  • bind_ip:对外服务绑定ip。
  • port:端口,web管理端口+10000。
  • fork:daemon方式。
  • journal:开启日志功能。
  • syncdelay:系统同步刷新磁盘时间,单位秒,默认60。
  • directoryperdb:每个db存放在单独目录中,建议设置该参数,与mysql独立表空间类似。
  • maxConns:最大连接数。
  • repairpath:执行repair时的临时目录。没有开启journal,异常down机后重启,必须执行repair操作。

mongoDB操作,dn=数据库名,mongoDB不需要显示创建库,当执行操作时会自动创建。

基本操作:

  • 插入:.save(文档)
  • 查询:.find([{条件},{字段:1,...}])。findOne([{条件}])返回游标第一条记录。
  • 限制:.limit(数量)。
  • 修改:.update({条件},{$set:{key:value}},$inc整型增加。
  • 删除:.remove([{条件}])
  • 记录条数:.count()。要返回限制之后的记录条数:.count(true|非0)
  • 跳跃:.skip(数量从0开始)。配合limit形成mysql中limit操作:.skip(start).limit(size)
  • 排序:.sort({key:[1|-1]...})。1升序,-1降序。
  • 分组:MapReduce相当于mysql中group by,但是操作更加灵活。
    db.runCommand(
    {
    mapreduce:<collection>,//表
    map:<map function>,//生成K/V形式对象
    reduce:<reducefunction>//对生成的K/V形式对象进行相关操作
    [,query:<条件>]//相当于where条件
    [,sort:<条件>]//排序
    [,limit:<数量>]//限制
    [,out:<名称>]//统计结果存放集合,不指定则使用临时集合,客户端断开后自动删除
    [,keeptemp:<true|false>]//是否保留临时集合
    [,finalize:<function>]//最终处理函数
    [,scope:<对象>]//向map,reduce,finalize导入外部变量
    [,verbose:true]//显示详细的时间统计信息
    })
     

条件操作:

  • $or:{$or:[{条件},...]}。或。
  • like:{key:/value/}=key like %value%。{key:/^value/}=key like value%。
  • $T 比较:{key:{$T:value}}。$gt:大于,$lt:小于,$gte:大于等于,$lte:小于等于,$ne:不等于。
  • $all 匹配所有:{key:{$all:[value...]}},key包含所有value...才符合。
  • $in 包含:{key:{$in:[value...]}},key包含其中1个value...就符合。
  • $nin 不包含:{key:{$nin:[value...]}},key一个都不包含value...才符合。
  • $exists 判断字段是否存在:{key:{$exists:[true|false]}}。判断文档是否包含某个字段,在判断null时会联合使用。
  • $mod 取模:{key:{$mod:[x,y]}}。判断key取模x等于y。
  • distinct:db.dn.distinct('key')。
  • 正则匹配:{key:{[|$not]:/正则/}}
  • null 值:直接写null,不用加冒号,也不能不写。

常用组件:

  1. capped collection:LRU集合,常用于日志、缓存、自动存档。读写效率比默认collection高,必须事先创建并声明大小,超过指定大小后,则采用FIFO策略。只能insert,update,不能delete。
  2. gridfs:海量大文件存储。./mongofiles put filePath 。./mongofiles get filePath

管理:

  • 数据导出:./mongoexport -d dn -c tableName -o outPutFile。
  • 数据导入:./mongoimport -d dn -c tableName -o inputFile。
  • 数据备份:./mongodump -d dn -o dumpPath
  • 数据恢复:./mongorestore -d dn dumpPath
  • 访问控制:1.绑定访问ip地址:./mongod --bind_ip ip。2.设置端口.3.U/P:服务端启动登录验证模块 ./mongod --auth。添加用户:db.addUser(U,P)

优化:

  • 创建索引:.ensureIndex({key:[1|-1]}[,backgroud:true])。1,升序,2降序。backgroud:后台执行,推荐。
  • 开启慢查询日志:启动db时加上参数 -profile=级别 -slowms=.0:不开启,1:记录慢查询(不设置slowms则默认为>100ms),2:记录所有命令。
  • 查询慢查询日志:db.system.profile.find({millis:{$gt:100}})
  • 限定返回结果条数
  • 只查询使用到的字段,而不查询所有字段
  • 采用capped collection。
  • server side code execution,慎用。
  • hint:强制使用索引。

性能监控:

  • mongosniff:./mongosniff --source NET lo。从底层监控有哪些命令发送给mongoDB去执行。
  • mongostat:./mongostat。实时统计。
  • db.serverStatus():实时运行状态。
  • db.stats():数据库状态。
  • cacti、nagios、zabbix等第三方监控。

高可用:

  1. replica sets:集群。
  2. 主从:主启动时加 -master,从启动时加-slave -source。新版本不推荐

海量数据处理:replica sets+sharding

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值