bin下的mongod就是MongoDB的服务端进程,mongo就是其客户端,其它的命令用于MongoDB的其它用途如MongoDB文件导出等

启动方式:

1.直接启动,指定各项参数:

/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --logpath=/data/logs/mongodb.log --logappend  --port=27017 --fork --auth

--fork:以创建子进程的方式启动

--auth  连接需认证 (默认连接无认证限制)

2.通过配置文件启动:

/usr/local/mongodb/bin/mongod -f  /PushMongodbdata/psmongo.conf

配置文件的内容:

dbpath=/PushMongodbdata/db
logpath=/PushMongodbdata/logs/mongodb.log
port=28888
fork=true
auth=true 

连接:

admin库下的user表为超级用户(添加用户db.addUser("user","pwd")),以超级用户登录就可以直接访问所有的库

如果启动时 连接开启了认证则 如下:

./mongo 127.0.0.1:28888(直接进入的是test库,访问其他库需要该库的用户名和密码认证,db.auth("user","pwd"),返回1则成功)

./mongo 127.0.0.1:28888/admin -u usename -p (以超级用户登录,就可以直接访问所有的库无需认证)

在远程客户端,以指定的库的账户登录指定的库 ,只能有对该库的操作权限,同时没有清空所有数据的权限

客户端工具:

1.MongoVUE windows GUI客户端工具

2.Pymongo  MongoDB Python 接口开发包

文档http://api.mongodb.org/python/2.5.1/index.html

import pymongo 
conn=pymongo.Connection("10.20.14.196",28888)
db=conn['PushData']
db.authenticate('chao','123456')#####
coll=db['LogData']

mongdb自增id的实现:官方地址http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/#auto-increment-optimistic-loop

import pymongo
c = pymongo.Connection('localhost', 27017)
db = c.test
pid_collection = db.people_id

先插入一个最初的数据:(用于以后update)
pid_collection.save({"url_id":0})

之后就可以利用这个collection来返回新id了

new_id = pid_collection.find_and_modify(update={"$inc":{"url_id":1}}, new=True).get("url_id")

可以把它包装成一个方法来调。

这里需要提的是, find_and_modify 是一个atmoic operation,在这里用它就是为了保证线程安全。可以参考这里

建立索引:

性能分析函数 explain()

db.person.find({'name':'xxxx'}).explain() 列出操作的各项性能指标信息

建立索引函数

db.person.ensureIndex({'name':1}) ”1“:表示按照name进行升序,”-1“:表示按照name进行降序。

db.person.ensureIndex({"name":1},{"unique":true}) 建立唯一索引,重复的键值不能插入

db.person.ensureIndex({"name":1,'age':1}) 组合索引

db.person.getindexes()来查看下person集合中到底生成了那些索引。

db.person.find({'name':'xxx','age':'12'}).hint({'name':1,'age':1})强制以某种索引方案来查询

删除索引:db.person.dropIndexes('索引名')

停止MongoDB

让MongoDB稳妥的停下来:

最基本的方法是向MongoDB服务器发送一个SIGINT或者SIGTERM信号。

如果服务器是作为前台进程运行在终端的,就直接按Ctrl+C,否则就用kill这种命令发出信号,kill -2 pid (SIGINT) 或者 kill  pid(SIGTERM).

当mongod收到SIGINT或者SIGTERM时,会稳妥退出。也就是说会等到当前运行的操作或者文件预分配完成(需要一些时间),关闭所有打开的连接,将缓存的数据刷新到磁盘,最后停止。

千万不要向运行中的恶MongoDB发送 SIGKILL (kill -9 ).这样会导致数据库直接关闭,上面讲到的步骤都将被忽略,这会使数据文件损坏

另一种稳妥的方式就是使用shutdown命令,{'shutdown':1}.这是管理命令,要在admin数据库下使用。shell提供了辅助函数,来简化这一过程

>use admin

>db.shutdownServer()

repairDatabase 修复损坏的数据是不得已时的最后一招,尽可能稳妥的停掉服务器。利用复制功能实现故障恢复,经常做备份,这些才是最有效的管理数据的手段

复制:

运行 ./mongod --dbpath=/abs/master --port=10000 --master  启动主服务器,建立主节点

运行./mongod  --dbpath=/abs/slave  --port=10001   --slave --source   localhost:10000 启动从服务器,建立从节点

所有从节点都从主节点复制内容

总的来说,MongoDB的复制至少需要两个服务器或者节点,其中一个是主节点,负责处理客户端请求,其他都是从节点,负责映射主节点的数据,主节点记录在其上执行的所有操作。从节点定期轮询主节点获得这些操作,然后对自己的数据副本执行这些操作,由于和主节点执行了相同的操作,从节点就能保持与主节点的数据同步。

主节点的操作记录称为oplog.oplog存储在一个特殊的数据库中,叫做local。 oplog就在其中的oplog.$main集合里面。oplog中的每个文档都代表主节点上执行的一个操作

分片:

何时分片:机器的磁盘不够用了;单个mongod已经不能满足写数据的性能需要了;想将大量数据放在内存中提高性能

BSON

MongoDB的文档是个抽象概念。其具体的呈现方式取决于使用的驱动和编程语言。因为MongoDB中的通信大量依赖于文档,所以需要一种所有驱动、工具和进程都能共享的文档表示方式。这种表达叫做Binary JSON (BSON)

BSON是轻量级的二进制格式,能将MongDB的所有文档表示为字节字符串。数据库能理解BSON,存在磁盘上的文档也是这种格式

MongoDB 使用经验笔记的更多相关文章

  1. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  2. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  3. MongoDB 学习笔记(原创)

    MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...

  4. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  5. MongoDB学习笔记(转)

    MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...

  6. 【转】MongoDB学习笔记(查询)

    原文地址 MongoDB学习笔记(查询) 基本查询: 构造查询数据. > db.test.findOne() { "_id" : ObjectId("4fd58ec ...

  7. MongoDB学习笔记(六)--复制集+sharding分片 && 总结

    复制集+sharding分片                                                               背景 主机 IP 服务及端口 Server A ...

  8. MongoDB学习笔记(五)--复制集 && sharding分片

    主从复制                                                                                       主从节点开启 主节 ...

  9. MongoDB学习笔记(四)--索引 && 性能优化

    索引                                                                                             基础索引 ...

随机推荐

  1. ASP.NET MVC 扩展自定义视图引擎支持多模板&动态换肤skins机制

    ASP.NET  mvc的razor视图引擎是一个非常好的.NET  MVC 框架内置的视图引擎.一般情况我们使用.NET MVC框架为我们提供的这个Razor视图引擎就足够了.但是有时我们想在我们的 ...

  2. RAM和ROM和Flash ROM的区别

    转;http://openedv.com/thread-81182-1-1.html                           http://www.sohu.com/a/112676146 ...

  3. Windows下Tomcat+nginx配置证书实现登录页https访问

    最近公司出于安全考虑,需要将登录页做成https访问,其他页面仍采用http访问,环境是Linux平台,web服务器采用Tomcat + Nginx.之前没接触过nginx,这两天网上查资料,试了好多 ...

  4. Npm 被公司墙解决方法

    npm被公司墙了,不能用npm安装任何包应用了. npm ERR! Darwin npm ERR! argv "/usr/local/Cellar/node/6.4.0/bin/node&q ...

  5. python升级安装后的yum的修复

    升级python版本号后,执行yum # yum -y install openssl 提演示样例如以下: There was a problem importing one of the Pytho ...

  6. 关于 php 调用 其他语言写的Web Service SOAP 接口的参数传递问题

    关于 php 调用 其他语言写的Web Service SOAP 接口的参数传递问题,有需要的朋友可以参考下. php调用java写的soap接口经验:   场景一: java是以数组的形式接收参数的 ...

  7. C#泛型<T>说明

    泛型:即通过参数化类型来实现在同一份代码上操作多种数据类型.泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用. C#泛型的作用概述 C#泛型赋予了代码更强的类型安全,更 ...

  8. Android 六大存储

    Android平台进行存储的方式: 一.使用SharedPreferences存储 二.文件存储数据 三.SQLite数据库存储 四.使用ContentProvider存储数据 五.网络存储数据 今天 ...

  9. EasyNVR RTSP摄像机转HLS直播服务器中使用Onvif协议控制预置位

    EasyNVR支持预置位控制,包括转到指定预置位,设置指定预置位,删除指定预置位 预置位在安防领域有较为普遍的应用,可以进行很多既定位置的跳转,很方便 之前我们说过如何用Onvif协议进行设备的发现, ...

  10. 九度OJ 1158:买房子 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1801 解决:1096 题目描述: 某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每 ...