mongoDB 笔记
官网
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
说的是比较实际的问题
但是再看看
我为什么选择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啊!吃螃蟹还是要付出代价的!