MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB官方网站:
网站上有可以安装的文件下载,目前版本是2.0.4版本
MongDB入门的书有:
<<MongoDB权威指南>> 作 者:(美) 霍多罗夫,(美) 迪洛尔夫 著,程显峰 译
作为NO SQL数据库的一个典型,MongDB在处理大数据量更新的时候非常优秀,据说能比传统DBMS高3个数量级(1000倍???)。
MongoDB的安装相当简单:
1.从官网下载ZIP包
2.解压缩ZIP.
3.编辑一个启动的脚本startup.bat,本例子为windows 7 版本64位,所以是一个bat文件:
D:\GreenProg\mongodb-win32-x86_64-2.0.4\bin\mongod.exe --dbpath=d:/mongodb/data
4.其中dbpath参数是指的数据存放路径,如果没有建立d:/mongodb/data文件夹,请手工建立.
5.运行脚步,看到如下提示表示启动成功:
D:\GreenProg\mongodb-win32-x86_64-2.0.4>D:\GreenProg\mongodb-win32-x86_64-2.0.4\
bin\mongod.exe --dbpath=d:/mongodb/data
Fri Mar 30 14:52:31 [initandlisten] MongoDB starting : pid=6900 port=27017 dbpat
h=d:/mongodb/data 64-bit host=zhouxj_PC
Fri Mar 30 14:52:31 [initandlisten] db version v2.0.4, pdfile version 4.5
Fri Mar 30 14:52:31 [initandlisten] git version: 329f3c47fe8136c03392c8f0e548506
cb21f8ebf
Fri Mar 30 14:52:31 [initandlisten] build info: windows sys.getwindowsversion(ma
jor=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB
_VERSION=1_42
Fri Mar 30 14:52:31 [initandlisten] options: { dbpath: "d:/mongodb/data" }
Fri Mar 30 14:52:31 [initandlisten] journal dir=d:/mongodb/data/journal
Fri Mar 30 14:52:31 [initandlisten] recover : no journal files present, no recov
ery needed
Fri Mar 30 14:52:31 [initandlisten] waiting for connections on port 27017
Fri Mar 30 14:52:31 [websvr] admin web console waiting for connections on port 2
8017
Fri Mar 30 14:53:31 [clientcursormon] mem (MB) res:23 virt:89 mapped:0
MongoDB的管理:
启动控制台命令:mongo(这个有点象oracle的sqlplus),结果如下:
D:\GreenProg\mongodb-win32-x86_64-2.0.4\bin>mongo
MongoDB shell version: 2.0.4
connecting to: test
>
控制命令的语法是javaScript,这个真的很方便.例如:
> x=200
200
> x/4
50
>
关闭数据服务命令.
> use admin
switched to db admin
> db.shutdownServer();
Fri Mar 30 15:12:32 DBClientCursor::init call() failed
Fri Mar 30 15:12:32 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1
server should be down...
Fri Mar 30 15:12:32 trying reconnect to 127.0.0.1
Fri Mar 30 15:12:33 reconnect 127.0.0.1 failed couldn't connect to server 127.0.
0.1
Fri Mar 30 15:12:33 Error: error doing query: unknown shell/collection.js:151
>
开发(java语言):
java开发需要下载java驱动包,地址是:https://github.com/mongodb/mongo-java-driver/releases
开发示例:
import java.net.UnknownHostException;
import java.util.Set;
import com.mongodb.Mongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
import com.mongodb.MongoException;
public class MongoTest {
public static void main(String[] args) {
// Mongo m = new Mongo();
// or
// Mongo m = new Mongo( "localhost" );
// or
Mongo m;
try {
m = new Mongo("localhost", 27017);
DB db = m.getDB("mydb");
//boolean auth = db.authenticate(myUserName, myPassword); //可选的权限控制
Set<String> colls = db.getCollectionNames();
for (String s : colls) {
System.out.println(s); //取得所有文档打印
}
DBCollection coll = db.getCollection("testCollection"); //按名字取文档
BasicDBObject doc = new BasicDBObject();
doc.put("name", "MongoDB");
doc.put("type", "database");
doc.put("count", 1);
BasicDBObject info = new BasicDBObject();
info.put("x", 203);
info.put("y", 102);
doc.put("info", info);
coll.insert(doc); //对指定文档插数据,
DBObject myDoc = coll.findOne(); //查找一个数据
System.out.println(myDoc);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MongoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果可能是这样:
system.indexes
testCollection
{ "_id" : { "$oid" : "4f756443848c86ccbb35f80e"} , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info" : { "x" : 203 , "y" : 102}}
mongDB的特性是能自动分片的处理来响应高并发的数据读写要求,默认情况下mongDB是非精确的处理数据,
请参看CAP原则,对于要求严格一致性的数据要求不适合用mongDB.如何部署自动分片的mongDB集群,请参看相关文档.