首页 > 代码库 > Mongodb杂谈(一)
Mongodb杂谈(一)
Mongodb杂谈(一)
开始学习mongodb时,找一些中文博客看。后来发现很多知识都搜不到,最后还是看官方网站和权威指南,还是这两者靠谱,闲的时候可以多浏览一下。此文总结一下我入门学习mongodb的经验。
Mongo shell操作mongodb
安装完mongodb客户端后,通过shelll来操作mongodb。我是在Ubuntu使用客户端的,直接用apt-get来安装,比较简单。
方法1交互式(类似mysql)
连接格式mongo host:port/dbName –u userName –p password
linger@ubuntu:~/data/test4$ mongo localhost:9019/admin–u linger –p 123123
show dbs;
show tables;
方法2脚本式
mongo –nodb 进入mongo解释器
> Master=new Mongo("localhost:9019")
connection to localhost:9019
> Mdb=Master.getDB("admin")
admin
> Mdb.auth("linger ","123123")
1
> Mdb.getCollectionNames()
[ "admin","system.indexes", "system.users", "test" ]
下面的连接方法也是可以的
Mdb =connect("localhost:9019/admin","linger ","123123")
方法3文件脚本式
mongo < test.js
test.js文件内容
Master=new Mongo("localhost:9019")
Mdb=Master.getDB("admin")
Mdb.auth("linger","123123")
Mdb.getCollectionNames()
这里用了输入重定向的方法。
官网还介绍了一个执行js的方法,
mongo localhost:27017/test myjsfile.js
但是我感觉这样不够灵活,因为连接的主机ip和端口还有dbName写在命令里面。
交互式的方法,更像操作mysql那样。
脚本式的方法,更像编程语言那样。
交互式和脚本式一些命令的对照
http://docs.mongodb.org/manual/tutorial/write-scripts-for-the-mongo-shell/#mongo-shell-new-connections
简单谈谈增删改读
mongodb以json格式处理数据的,
比如插入数据
db.testTable.insert({user:”linger”,”age”,”24”})
查询数据
db.testData.find({user:"linger"})
关于增删改读的详细数据可以参考一下数据
增删改读教程
http://docs.mongodb.org/manual/applications/crud/
增删改读API参考手册
http://docs.mongodb.org/manual/reference/method/
应用开发中mongodb的使用
Shell的方式操作mongodb,我觉得主要是管理mongodb的,这种方式做不了应用开发。
做应用开发时,我们得需要某种编程语言,然后通过mongodb的驱动来调用mongodb相关接口。
官网对驱动的描述是这样子的
An application communicates with MongoDB by wayof a client library, called a driver, that handles all interaction with the database in alanguage appropriate to the application.
http://docs.mongodb.org/manual/applications/drivers/
简单来说就是,应用通过驱动跟mongodb交互。
驱动有官方提供的,也有第三方自己开发的。
下面这张图是各语言对应的驱动
网上意外发现云风大哥竟然自己开发了一套lua驱动。开始他想在C Drive做一层封装,给lua调用,后来又从协议层实现了一份。我简单浏览了一下代码,协议层是用C写的,直接调用windows socket与server通信,封装好最基本的api,然后lua再调用C封装成各种功能。
下面这段话来自他博客
我曾经想在 C Driver 的基础上做封装。做的过程中发现 c driver 代码质量不高,且特性支持不完整,最终我考虑自己从协议层开始重新做一份。
mongo 的文档不算完整,我感觉协议定义也不是很严谨。所以在实现过程中遇到许多麻烦。原本认为一天能写完的,结果做了三天。今天终于可以发布一个初步的版本了。
MongoDB 的 Lua Driver
http://blog.codingnow.com/2013/06/mongodb_lua_driver.html
http://blog.codingnow.com/2013/06/lua_mongo.html
https://github.com/cloudwu/lua-mongo
可以将mongodb当做hadoop的输入输出
MongoDB Connector for Hadoop
The MongoDB Connector for Hadoop is aplugin for Hadoop
that provides the ability to use MongoDB asan input source and/or an output destination.
http://docs.mongodb.org/ecosystem/tools/hadoop/
关于主从分离
Mongodb可以做主从的集群,主叫primary或者master,从叫secondary或者slave。
值得注意的是secondary默认是不可读写的。
当时我连接了一台secondary,想查但是出错了。
Wed Dec 24 18:50:04.670 error: {"$err" : "not master and slaveOk=false", "code" :13435 } at src/mongo/shell/query.js:128
有两种方法实现从机的查询:
第一种方法:db.getMongo().setSlaveOk();
第二种方法:rs.slaveOk();
对于replica set 中的secondary 节点默认是不可读的。
在写多读少的应用中,使用Replica Sets来实现读写分离。
通过在连接时指定或者在主库指定slaveOk,
由Secondary来分担读的压力,
Primary只承担写操作。
http://wengzhijuan12.blog.163.com/blog/static/3622414520137104257376/
让mongodb的secondary支持读操作
Replication is the process of synchronizingdata across multiple servers.http://docs.mongodb.org/manual/core/replication-introduction/
Replication用来同步各server数据,可以用来做主从分离。
关于Sharding
Sharding is a method for storing data acrossmultiple machines. MongoDB uses sharding to support deployments with very largedata sets and high throughput operations.
http://docs.mongodb.org/manual/core/sharding-introduction/
简单来说,就是Sharding是在多台机器存储数据,起扩容的作用。
关于用户权限
管理员身份新添加的db,
管理员身份也是直接登录不了的,
得先登录到其他db,
再用use命令来切换到刚才的添加db。
如果想直接登录,要额外添加用户并授权。
因此,我觉得用户和密码是对具体的一个db来说的,而不是对mongodb来说的。
给数据库recsys添加一个用户linger,并添加读写权限。
db.addUser({user:"linger",pwd:"09388296",roles:["readWrite"]})
此处参考
http://docs.mongodb.org/manual/reference/method/db.addUser/#db.addUser
额外参考资料:
MongoDB Scripting
http://docs.mongodb.org/manual/administration/scripting/
本文链接:http://blog.csdn.net/lingerlanlan/article/details/42150611
本文作者:linger
Mongodb杂谈(一)