设为首页 收藏本站
查看: 839|回复: 0

[经验分享] MongoDB 使用经验笔记

[复制链接]

尚未签到

发表于 2015-7-8 09:17:38 | 显示全部楼层 |阅读模式
  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,存在磁盘上的文档也是这种格式
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84374-1-1.html 上篇帖子: MongoDB循序渐进之[入门] 下篇帖子: MongoDB Shell 学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表