mongoDB 笔记

官网

http://www.mongodb.org

java driver下载:

https://github.com/mongodb/mongo-java-driver/downloads

 

先看

http://www.mongodb.org/display/DOCS/Quickstart

要在windows下安装为service,见

http://www.mongodb.org/display/DOCS/Windows+Service

具体命令是

mongod --port 13668 --logpath D:/mongodb-win32-i386-1.8.1/log/mongo.log --logappend --dbpath D:/mongodb-win32-i386-1.8.1/data --directoryperdb --serviceName MongoDb_181 –install

注意建议不要使用参数 --bind_ip 127.0.0.1 ,这样的话只能通过127.0.0.1来连接,使用局域网ip和localhost则不能连上

对应的删除命令是:

mongod --serviceName MongoDb_181  --remove

如果不需要作为服务,去掉上面的命令中的—install 和 --serviceName  参数即可

即:

mongod  --port 13668 --logpath D:/mongodb-win32-i386-1.8.1/log/mongo.log --logappend --dbpath D:/mongodb-win32-i386-1.8.1/data –directoryperdb

注意文档中有些问题:

--logpath 参数必须是个文件,不能是文件夹

--dbpath 所指向的文件夹必须已经存在,否则安装成功却启动不了,总是重复启动--失败

 

更多命令参数见    --help

突然看到这篇文章:

为什么我们放弃使用MongoDB

说的是比较实际的问题

32为系统文件大小限制,由于底层内存映射的实现造成的。

但是再看看

我为什么选择MongoDB

mongodb使用心得

想想,就当吃吃螃蟹吧。

具体我的体会等用过了再写。

对应的客户端命令则是mongo --port 13668

使用help查看帮助

使用db.help()查看db操作帮助

use 命令可切换到指定数据库,不存在的话就会创建一个,但不是马上创建,而是在插入数据时创建。

使用db.addUser添加用户到某个数据库,注意是指定的数据库,其他的数据库是不存在这个用户的.

关于权限管理可参见 http://blog.csdn.net/a9529lty/archive/2011/05/31/6457279.aspx

 

验证的顺序也是一样,先转到某个数据库,再验证用户。

参见这篇文章快速入门http://blog.sina.com.cn/s/blog_661b4cd50100h8zk.html

使用java 见http://www.mongodb.org/display/DOCS/Java+Tutorial

它的依赖很简单,只要添加驱动依赖包就可以say hello world!了:

public class HelloWorls
{
	public HelloWorls()
	{
		
	}
	
	public static void main(String[] args)
	{
		try
		{
			Mongo m = new Mongo( "192.168.666.666" , 13668 );

			DB db = m.getDB( "xxxx" );
			
			db.authenticate("root", "1".toCharArray());
			DBCollection c = db.getCollection("user");
			
			DBCursor cur = c.find();

	        while(cur.hasNext()) {
	            System.out.println(cur.next());
	        }
			
		}		
		catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

输出结果:

{ "_id" : { "$oid" : "4df5d7732ad88ed372ae6e6f"} , "uid" : 1.0 , "username" : "Falcon.C" , "age" : 25.0}
{ "_id" : { "$oid" : "4df5df8afad72811a3fc089a"} , "uid" : 1.0 , "username" : "Falcon.C" , "age" : 25.0}

可见_id是mogodb自动添加的属性,虽然两条记录逻辑值完全一样,但是可由_id区分。

_和$是mogodb保留字

由于使用文件的方式,如果文件没有删除的话,数据库结构还是没变的。

并发和性能:

http://www.mongodb.org/display/DOCS/Java+Driver+Concurrency

建议使用请求块,保证使用同一个连接来操作,这不是事务的意思,mongodb不支持事务!

DB db...;
DBCollection coll...;
db.requestStart();
coll.insert(...);
DBObject err = db.getLastError();
db.requestDone();

Mongo驱动自己维护了一个连接池,大多数情况下是够用的。

Mongo和DB,DBCocclection是线程安全的。

合适的做法是保持一个Mongo对象,在程序关闭时记得调用Mongo.close()方法。

将POJO转为 DBObject的方法:

String jstr = JSONObject.fromObject(new Object()).toString();
DBObject obj = (DBObject)JSON.parse(jstr);

这里用到了jsonlib的库,mongo java driver自带的JSON.serialize方法是不能转化POJO的。

 

增删改查:

DBCollection:

insert

update,如果希望实现类似hibernate的merge功能,可设置uptset为true

save ??

remove

 

目前说说我的感觉:

使用简单方便,感觉很快,与json结合很好。

管理工具简单,查看数据要用命令行敲。目前还没碰到乱码的问题,但是如果有中文的话,用客户端查出的结果显示不出来。

实际应用还比较少,32位上的限制是个大问题。

它的查询基于对象形式,有严格的类型匹配,这就带来不方便。例如查一个id属性为整形1的数据,如果传入的是字符串“1”就会查不到。

不支持事务,还是有点麻烦的!

要自己写ORM啊!吃螃蟹还是要付出代价的!


Total views.

© 2013 - 2024. All rights reserved.

Powered by Hydejack v6.6.1