您的位置:首页 > 博客中心 > 数据库 >

Mongodb杂谈(一)

时间:2022-03-14 04:19

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那样。

脚本式的方法,更像编程语言那样。

 

交互式和脚本式一些命令的对照

技术分享

 

简单谈谈增删改读

mongodb以json格式处理数据的,

比如插入数据

db.testTable.insert({user:”linger”,”age”,”24”})

查询数据

db.testData.find({user:"linger"})

 

关于增删改读的详细数据可以参考一下数据

增删改读教程

增删改读API参考手册

 

应用开发中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.

简单来说就是,应用通过驱动跟mongodb交互。

驱动有官方提供的,也有第三方自己开发的。

下面这张图是各语言对应的驱动

技术分享

网上意外发现云风大哥竟然自己开发了一套lua驱动。开始他想在C Drive做一层封装,给lua调用,后来又从协议层实现了一份。我简单浏览了一下代码,协议层是用C写的,直接调用windows socket与server通信,封装好最基本的api,然后lua再调用C封装成各种功能。

 

下面这段话来自他博客

我曾经想在 C Driver 的基础上做封装。做的过程中发现 c driver 代码质量不高,且特性支持不完整,最终我考虑自己从协议层开始重新做一份。

mongo 的文档不算完整,我感觉协议定义也不是很严谨。所以在实现过程中遇到许多麻烦。原本认为一天能写完的,结果做了三天。今天终于可以发布一个初步的版本了。

MongoDB 的 Lua Driver

 

可以将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只承担写操作。

让mongodb的secondary支持读操作


技术分享

Replication is the process of synchronizingdata across multiple servers.

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.

简单来说,就是Sharding是在多台机器存储数据,起扩容的作用。


技术分享


关于用户权限

管理员身份新添加的db,

管理员身份也是直接登录不了的,

得先登录到其他db,

再用use命令来切换到刚才的添加db。

如果想直接登录,要额外添加用户并授权。

因此,我觉得用户和密码是对具体的一个db来说的,而不是对mongodb来说的。

 

给数据库recsys添加一个用户linger,并添加读写权限。

db.addUser({user:"linger",pwd:"09388296",roles:["readWrite"]})


此处参考

 


额外参考资料:

MongoDB Scripting

 


本文链接:http://blog.csdn.net/lingerlanlan/article/details/42150611

本文作者:linger



热门排行

今日推荐

热门手游