MongoDB 系統介紹
1.認識及了解MongoDB
MongoDB 是一個面向集合的,模式自由的文檔型數據庫.
面向集合, 意思是數據被分組到若干集合,這些集合稱作聚集(collections). 在數據庫里每個聚集有一個唯一的名字,可以包含無限個文檔. 聚集是RDBMS中表的同義詞,區別是聚集不需要進行模式定義.
模式自由, 意思是數據庫并不需要知道你將存入到聚集中的文檔的任何結構信息.實際上,你可以在同一個聚集中存儲不同結構的文檔.
文檔型, 意思是我們存儲的數據是鍵-值對的集合,鍵是字符串,值可以是數據類型集合里的任意類型,包括數組和文檔. 我們把這個數據格式稱作 “[BSON]” 即 “Binary Serialized dOcument Notation.”
集 文檔數據庫,鍵值對存儲和關系型數據庫的優點于一身.
MongoDB (名稱來自”humongous”) 是一個可擴展的,高性能,開源,模式自由,面向文檔的數據庫.使用C++編寫,MongoDB特點:
* 面向文檔存儲(類JSON數據模式簡單而強大)
* 動態查詢
* 全索引支持,擴展到內部對象和內嵌數組
* 查詢記錄分析
* 快速,就地更新
* 高效存儲二進制大對象 (比如照片和視頻)
* 復制和故障切換支持
* Auto- Sharding自動分片支持云級擴展性
* MapReduce 支持復雜聚合
* 商業支持,培訓和咨詢
所 謂”面向集合”(Collenction-Orented),意思是數據被分組存儲在數據集中, 被稱為一個集合(Collenction)。每個集合在數據庫中都有一個唯一的標識名,并且可以包含無限數目的文檔。集合的概念類似關系型數據庫 (RDBMS)里的表(table),不同的是它不需要定義任何 模式(schema)。
模式自由(schema-free),意味著對于存儲在mongodb數據庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同 結構的文件存儲在同一個數據庫里。
存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標 識一個文檔,為字符串類型,而值則可以是各種復雜的文件類型。我們稱這種存儲形式為 BSON(Binary Serialized dOcument Format)。
哪些公司在用MongoDB
sourceforge、github等。
MongoDB 有個缺點,存儲的數據占用空間過大。
MongoDB的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統的RDBMS系統 (豐富的功能)架起一座橋梁,集兩者的優勢于一身。根據項目主頁的描述,Mongo 適合用于以下場景:
* 網站數據:Mongo非常適合實時的插入,更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性。
* 緩存:由于性能很高,Mongo也適合作為信息基礎設施的緩存層。在系統重啟之后,由Mongo搭建的持久化緩存層可以避免下層的數據源過載。
* 大尺寸,低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。
* 高伸縮性的場景:Mongo非常適合由數十或數百臺服務器組成的數據庫。Mongo的路線圖中已經包含對MapReduce引擎的內置支持。
* 用于對象及JSON數據的存儲:Mongo的BSON數據格式非常適合文檔化格式的存儲及查詢。
自然,MongoDB的使用也會有 一些限制,例如它不適合:
* 高度事務性的系統:例如銀行或會計系統。傳統的關系型數據庫目前還是更適用于需要大量原子性復雜事務的應用程序。
* 傳統的商業智能應用:針對特定問題的BI數據庫會對產生高度優化的查詢方式。對于此類應用,數據倉庫可能是更合適的選擇。
* 需要SQL的問題
Via:http://www.infoq.com/cn/news/2009/09/mongodb
性能
在 我的使用場合下,千萬級別的文檔對象,近10G的數據,對有索引的ID的查詢不會比mysql慢,而對非索引字段的查詢,則是全面勝出。 mysql實際無法勝任大數據量下任意字段的查詢,而mongodb的查詢性能實在讓我驚訝。寫入性能同樣很令人滿意,同樣寫入百萬級別的數 據,mongodb比我以前試用過的couchdb要快得多,基本10分鐘以下可以解決。補上一句,觀察過程中mongodb都遠算不上是CPU殺手。
Via:http://www.wentrue.net/blog/?p=772
2. 安裝及配置
說明,MongoDB下載然后解壓縮以后就可以直接使用了,不需要編譯及安裝。
在頁面http://www.mongodb.org/display/DOCS/Downloads中找到適合于你所在操作系統的MongoDB版本。
[root@CentOS_Test_Server software]# wget http://downloads.mongodb.org/linux/mongodb-linux-i686-1.4.2.tgz
/home/software是存放軟件的目錄,把mongodb解壓到其它的目錄下
直接解壓縮到目錄/usr/local/webserver 下。
[root@CentOS_Test_Server software]# tar zxvf mongodb-linux-i686-1.4.2.tgz -C /usr/local/webserver/
[root@CentOS_Test_Server webserver]# ls
eaccelerator_cache mongodb-linux-i686-1.4.2 mysql nginx php squid
將目錄改名,方便以后使用方便。
[root@CentOS_Test_Server webserver]# mv mongodb-linux-i686-1.4.2/ mongodb
[root@CentOS_Test_Server software]# cd /usr/local/webserver/mongodb
[root@CentOS_Test_Server mongodb]# ls
bin GNU-AGPL-3.0 include lib README THIRD-PARTY-NOTICES
直接查看README文件的內容,里面的說明對使用MongoDB也會很有幫助。
[root@CentOS_Test_Server mongodb]# more README
MongoDB
=======
Welcome to MongoDB!
Package Contents
—————-
bin/mongod – MongoDB server
bin/mongo – MongoDB client
bin/mongodump – MongoDB dump tool – for backups, snapshots, etc..
bin/mongorestore – MongoDB restore a dump
bin/mongoexport – Export a single collection to test (json,csv)
bin/mongoimportjson – Import a json file into a collection
bin/mongofiles – Utility for putting and getting files from MongoDB gridfs
Useful Resources
—————-
MongoDB Website
* http://www.mongodb.org/
Documentation
* http://www.mongodb.org/display/DOCS/Documentation
MongoDB Maillists & IRC
* http://www.mongodb.org/display/DOCS/Community
如果直接輸入命令./mongod,則 MongoDB的數據直接保存在/data/db目錄(windows操作系統下是c:\data\db目錄), 默認監聽在27017端口。
如 果你啟動MongoDB時沒有指定任何參數,同時目錄/data/db也不存在,則會報錯。
[root@CentOS_Test_Server bin]# ./mongod –help | grep fork
–fork fork server process
[root@CentOS_Test_Server bin]# ./mongod –help | grep dbpath
–dbpath arg (=/data/db/) directory for datafiles
dbpath
–fastsync indicate that this instance is starting from a dbpath
[root@CentOS_Test_Server bin]# ./mongod –help | grep port
–port arg specify port number
–source arg when slave: specify master as <server:port>
運 行./mongod –help命令時mongodb提示了一下,也就是32位操作系統只支持最大2G的文件,如果你的應用中數據量很大,超過了2G,推薦安裝64位的操作 系統。2Gb or Not 2Gb – File limits說明 了為什么32位操作系統只支持最大2G的文件。
[root@CentOS_Test_Server bin]# ./mongod –help | more
** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
** see http://blog.mongodb.org/post/137788967/32-bit-limitations for more
創建目錄保存MongoDB數據的目錄。
[root@CentOS_Test_Server bin]# mkdir /home/mongodb_data
啟動MongoDB
[root@CentOS_Test_Server bin]# ./mongod –fork –dbpath=/home/mongodb_data –logpath /home/mongodb_data/mongodb.log –logappend
all output going to: /home/mongodb_data/mongodb.log
forked process: 3799
[root@CentOS_Test_Server bin]# ps aux | grep mongo
root 3799 0.0 0.7 59032 2008 ? Ssl 16:59 0:00 ./mongod –fork –dbpath=/home/mongodb_data –logpath /home/mongodb_data/mongodb.log –logappend
root 3825 0.0 0.2 3920 628 pts/1 S+ 17:00 0:00 grep mongo
[root@CentOS_Test_Server bin]# netstat -antl | grep 27017
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN
停止 MongoDB的進程時不能用kill -9,而最好用kill -15,否則會導致出現問題。
同時會自動啟動一個端口為28017的服務,此服務用于監控MongoDB的狀態
[root@CentOS_Test_Server bin]# netstat -a | grep 28017
tcp 0 0 *:28017 *:* LISTEN
用curl可以在啟動MongoDB所在的服務器上面直接訪問, 如果想從其它的訪問訪問此服務,則必須在防火墻上開放28017端口。
[root@CentOS_Test_Server bin]# curl localhost:28017
<html><head><title>mongodb CentOS_Test_Server:27017 </title></head><body><h2>mongodb CentOS_Test_Server:27017 </h2><p>
<pre>db version v1.4.2, pdfile version 4.5
git hash: 53749fc2d547a3139fcf169d84d58442778ea4b0
sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37
…..
我在服務器上打開了28017端口,不知道為什么 在其它的電腦上面輸入地址http://192.168.1.111:28017/無法訪問,暫時不知道是什么原因。
[root@CentOS_Test_Server bin]# iptables -A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 28017 -j ACCEPT
[root@CentOS_Test_Server bin]# /etc/init.d/iptables save
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
更多MongoDB啟動的問題,請移步 Starting and Stopping Mongo,http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo
3. 測試
[root@CentOS_Test_Server bin]# ls
運行MongoDB下面bin目錄下的mongo命 令,就可以進入MongoDB的shell界面了,跟MySQL有點類似,輸入命令help,其它的看幫助基本上就明白了。
mongo mongod mongodump mongoexport mongofiles mongoimport mongorestore mongos mongosniff mongostat
[root@CentOS_Test_Server bin]# ./mongo
MongoDB shell version: 1.4.2
url: test
connecting to: test
type “help” for help
> help
HELP
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
use <db name> set curent database to <db name>
db.help() help on DB methods
db.foo.help() help on collection methods
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
在MongoDB中,在使用Database或Collection前不需要提前創建,在使用的過程中會 自動創建。
更多的有關信息請移步MongoDB Tutorial。
a.測試一
我們來測試一下就明白了
> use recommender //在此之前我可從來沒有創建過數據庫recommender
> a={name: “caihuafeng”} //也就是json對象,大家看起來是不是非常熟悉
{ “name” : “caihuafeng” }
> b={website: “1616.net”}
{ “website” : “1616.net” }
> db.data.save(a) //在此之前我可沒有創建過表data,在數據庫recommender的表data中保存數據a,可以理解為往MySQL的表data中添加一條記錄
> db.data.save(b) //在數據庫recommender的表data中保存數據b,可以理解為往MySQL的表data中添加一條記錄
> db.data.find() //顯示數據庫recommender的表data中的所有數據
{ “_id” : ObjectId(“4bee745a0863b1c233b8b7ea”), “name” : “caihuafeng” }
{ “_id” : ObjectId(“4bee745f0863b1c233b8b7eb”), “website” : “1616.net” }
> show collections //顯示數據庫recommender中的所有表(collection在這里相當于MySQL中的表)
data
system.indexes //這個表是自動創建的
顯示數據庫recommender中website為1616.net的記錄,相當于MySQL中的 SELECT * FROM data WHERE website=’1616.net’;
> db.data.find({website:”1616.net”})
{ “_id” : ObjectId(“4bee745f0863b1c233b8b7eb”), “website” : “1616.net” }
顯示 數據庫recommender中name為caihuafeng的記錄,相當于MySQL中的SELECT * FROM data WHEREname =’caihuafeng’;
> db.data.find({name:”caihuafeng”})
{ “_id” : ObjectId(“4bee745a0863b1c233b8b7ea”), “name” : “caihuafeng” }
MongoDB 比其它的關系型數據庫更加靈活,因為每一行的記錄都可以有不同的結構,而且表的結構根本上不需要提前創建,靈活極了。
b.測試二
發現就是在寫js代碼,然后跟數據庫結合起來了。
> for (var i = 1; i <= 10; i++) db.data.save({“x”:6, “name”:”caihuafeng” + i});
> db.data.find();
{ “_id” : ObjectId(“4bee745a0863b1c233b8b7ea”), “name” : “caihuafeng” }
{ “_id” : ObjectId(“4bee745f0863b1c233b8b7eb”), “website” : “1616.net” }
{ “_id” : ObjectId(“4bee804ba23d558eb6687117″), “x” : 6, “name” : “caihuafeng1″ }
{ “_id” : ObjectId(“4bee804ba23d558eb6687118″), “x” : 6, “name” : “caihuafeng2″ }
{ “_id” : ObjectId(“4bee804ba23d558eb6687119″), “x” : 6, “name” : “caihuafeng3″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711a”), “x” : 6, “name” : “caihuafeng4″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711b”), “x” : 6, “name” : “caihuafeng5″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711c”), “x” : 6, “name” : “caihuafeng6″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711d”), “x” : 6, “name” : “caihuafeng7″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711e”), “x” : 6, “name” : “caihuafeng8″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711f”), “x” : 6, “name” : “caihuafeng9″ }
{ “_id” : ObjectId(“4bee804ba23d558eb6687120″), “x” : 6, “name” : “caihuafeng10″ }
> var cursor = db.data.find();
> while (cursor.hasNext()) {print(tojson(cursor.next()))};
{ “_id” : ObjectId(“4bee745a0863b1c233b8b7ea”), “name” : “caihuafeng” }
{ “_id” : ObjectId(“4bee745f0863b1c233b8b7eb”), “website” : “1616.net” }
{
“_id” : ObjectId(“4bee804ba23d558eb6687117″),
“x” : 6,
“name” : “caihuafeng1″
}
{
“_id” : ObjectId(“4bee804ba23d558eb6687118″),
“x” : 6,
“name” : “caihuafeng2″
}
{
“_id” : ObjectId(“4bee804ba23d558eb6687119″),
“x” : 6,
“name” : “caihuafeng3″
}
{
“_id” : ObjectId(“4bee804ba23d558eb668711a”),
“x” : 6,
“name” : “caihuafeng4″
}
{
“_id” : ObjectId(“4bee804ba23d558eb668711b”),
“x” : 6,
“name” : “caihuafeng5″
}
{
“_id” : ObjectId(“4bee804ba23d558eb668711c”),
“x” : 6,
“name” : “caihuafeng6″
}
{
“_id” : ObjectId(“4bee804ba23d558eb668711d”),
“x” : 6,
“name” : “caihuafeng7″
}
{
“_id” : ObjectId(“4bee804ba23d558eb668711e”),
“x” : 6,
“name” : “caihuafeng8″
}
{
“_id” : ObjectId(“4bee804ba23d558eb668711f”),
“x” : 6,
“name” : “caihuafeng9″
}
{
“_id” : ObjectId(“4bee804ba23d558eb6687120″),
“x” : 6,
“name” : “caihuafeng10″
}
> db.data.find({x:6}, {name:true}).forEach(function(x) {print(tojson(x));});
{ “_id” : ObjectId(“4bee804ba23d558eb6687117″), “name” : “caihuafeng1″ }
{ “_id” : ObjectId(“4bee804ba23d558eb6687118″), “name” : “caihuafeng2″ }
{ “_id” : ObjectId(“4bee804ba23d558eb6687119″), “name” : “caihuafeng3″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711a”), “name” : “caihuafeng4″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711b”), “name” : “caihuafeng5″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711c”), “name” : “caihuafeng6″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711d”), “name” : “caihuafeng7″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711e”), “name” : “caihuafeng8″ }
{ “_id” : ObjectId(“4bee804ba23d558eb668711f”), “name” : “caihuafeng9″ }
{ “_id” : ObjectId(“4bee804ba23d558eb6687120″), “name” : “caihuafeng10″ }
只取前3條記錄,跟MySQL中的limit是類似的意思。
> db.data.find().limit(3);
{ “_id” : ObjectId(“4bee745a0863b1c233b8b7ea”), “name” : “caihuafeng” }
{ “_id” : ObjectId(“4bee745f0863b1c233b8b7eb”), “website” : “1616.net” }
{ “_id” : ObjectId(“4bee804ba23d558eb6687117″), “x” : 6, “name” : “caihuafeng1″
4.MongoDB的主從復制(Master/Slave)配置及測試
主從復制有什么用呢? 比如,在兩臺服務器上分別部署了MongoDB,當一臺出現了問題以后,另外一臺可以接管服務,同時也起備份的作用。
MongoDB supports replication of data between servers for failover and redundancy.
MongoDB支持4種形式的復制,推薦用master/slave復制
* Master-Slave Replication
* Replica Pairs
* Replica Sets
* Limited Master-Master Replication
All else being equal, master/slave is recommended for MongoDB version 1.4.
與Master及Slave相關的幫助選項
[root@CentOS_Test_Server bin]# ./mongod –help | grep master
–master master mode
–source arg when slave: specify master as <server:port>
master ops to slave
[root@CentOS_Test_Server bin]# ./mongod –help | grep slave
–slave slave mode
–source arg when slave: specify master as <server:port>
–only arg when slave: specify a single database to replicate
–slavedelay arg specify delay (in seconds) to be used when applying
master ops to slave
–autoresync automatically resync if slave data is stale
啟動MongoDB的Master服務
[root@CentOS_Test_Server bin]# ./mongod –fork –master –dbpath /home/masterdb/ –port 27018 –logpath /home/masterdb/mongodb.log –logappend
all output going to: /home/masterdb/mongodb.log
forked process: 11463
[root@CentOS_Test_Server bin]# ls /home/masterdb/
local.0 local.ns mongodb.log mongod.lock
啟動MongoDB的Slave服務
[root@CentOS_Test_Server bin]# ./mongod –fork –slave –source localhost:27018 –autoresync –slavedelay 30 –dbpath /home/slavedb/ –port 27019 –logpath /home/slavedb/mongodb.log –logappend
all output going to: /home/slavedb/mongodb.log
forked process: 11848
[root@CentOS_Test_Server bin]# ls /home/slavedb/
local.0 local.ns mongodb.log mongod.lock _tmp
測試主從復制的功能
登錄到 MongoDB的Master服務,插入一條數據
[root@CentOS_Test_Server bin]# ./mongo localhost:27018
MongoDB shell version: 1.4.2
url: localhost:27018
connecting to: localhost:27018/test
type “help” for help
> use recommender
switched to db recommender
> db.data.insert({name: “caihuafeng”})
> db.data.find()
{ “_id” : ObjectId(“4beedc31e0e4fff2ce0295f6″), “name” : “caihuafeng” }
登錄MongoDB的Slave服務,我們發現剛才保存到Master里面的數據已經復制到Slave了,這正是我們要看到的效果。
[root@CentOS_Test_Server bin]# ./mongo localhost:27019
MongoDB shell version: 1.4.2
url: localhost:27019
connecting to: localhost:27019/test
type “help” for help
> use recommender
switched to db recommender
> db.data.find()
{ “_id” : ObjectId(“4beedc31e0e4fff2ce0295f6″), “name” : “caihuafeng” }
我們再看一下Slave服務上面產生的同步日志(/home/slavedb/mongodb.log)
Sun May 16 01:39:29 repl: from host:localhost:27018
Sun May 16 01:39:29 resync: dropping database recommender
Sun May 16 01:39:29 resync: cloning database recommender to get an initial copy
Sun May 16 01:39:29 allocating new datafile /home/slavedb/recommender.ns, filling with zeroes…
Sun May 16 01:39:29 done allocating datafile /home/slavedb/recommender.ns, size: 16MB, took 0.451 secs
Sun May 16 01:39:29 allocating new datafile /home/slavedb/recommender.0, filling with zeroes…
Sun May 16 01:39:31 done allocating datafile /home/slavedb/recommender.0, size: 64MB, took 1.397 secs
Sun May 16 01:39:31 allocating new datafile /home/slavedb/recommender.1, filling with zeroes…
Sun May 16 01:39:31 building new index on { _id: 1 } for recommender.data
Sun May 16 01:39:31 Buildindex recommender.data idxNo:0 { name: “_id_”, ns: “recommender.data”, key: { _id: 1 } }
…
為 了讓MongoDB的主從服務可以自動啟動,可以把下面的兩條命令加到/etc/rc.local中。
/usr/local/webserver/mongodb/bin/mongod –fork –master –dbpath /home/masterdb/ –port 27018 –logpath /home/masterdb/mongodb.log –logappend
/usr/local/webserver/mongodb/bin/mongod –fork –slave –source localhost:27018 –autoresync –slavedelay 30 –dbpath /home/slavedb/ –port 27019 –logpath /home/slavedb/mongodb.log –logappend
附:
Sun May 16 00:59:47 waiting for connections on port 27018
Sun May 16 00:59:47 web admin interface listening on port 28018
Sun May 16 01:12:27 waiting for connections on port 27019
Sun May 16 01:12:27 web admin interface listening on port 28019
mongodb的端口為27017時,相應的web admin監聽的端口為28017
mongodb 的端口為27018時,相應的web admin監聽的端口為28018
mongodb的端口為27019時,相應的web admin監聽的端口為28019
找到了一個規律,就是web admin的端口就是將mongodb的端口的第二位改為8,猜測應該是這樣的。
http://www.mongodb.org/display/DOCS/Master+Slave
http://www.mongodb.org/display/DOCS/Replication
5.MongoDB的Sharding功能
MongoDB的Sharding功能將在1.6版本中出現,將在2010年7月份發布。
MongoDB has been designed to scale horizontally via an auto-sharding architecture. Auto-sharding permits the development of large-scale data clusters that incorporate additional machines dynamically, automatically accomodate changes in load and data distribution, and ensure automated failover.
Sharding will be production-ready in MongoDB v1.6, estimated to be released in July, 2010. In the meantime, an alpha version of sharding is available in the 1.5.x development branch. Please see the limitations page for progress updates and current restrictions.
http://www.mongodb.org/display/DOCS/Sharding
6. 總結
在 寫這篇文章以前,我沒有用過MongoDB, 以前簡單的看過一些MongoDB的資料,只是有點了解,今天自己動手安裝測試了一下以后對MongoDB有了更加深入一點的了解,再學習幾天基本上就可 以在項目中實際使用了,比如MongoDB的讀寫性能也有必要再測試一下,雖然已經有不少人已經測試過了,證明MongoDB的讀寫性能比MySQL高, 不過功能沒有MySQL強。
其實TC的Table Database也能實現一些關系型數據庫的功能,也是值得深入研究一下的,其實以前我簡單的研究過。Tokyo Cabinet及Tokyo Tyrant的命令行接口。
Table Database的特點是支持檢索,支持多列字段,支持列索引,性能不如其它結構。
Table Database提供了類似RMDB的存儲功能,一個主鍵可以有多個字段,例如,在RMDB中user表可能會有user_id、name和 password等字段,而在Table Database也提供這種支持。
Via:http://willko.javaeye.com/blog/506728
http://zhliji2.blogspot.com/2009/05/tokyo-cabinetdbm.html
下面的文章也比較精彩,對MongoDB感興趣的可以看一看。
[譯] MongoDB 入門教程:http://chenxiaoyu.org/blog/archives/242
http://www.fuchaoqun.com/2010/01/mongodb-in-action/
http://blog.chenlb.com/2010/05/mongodb-vs-mysql-query-performance.html
http://www.wentrue.net/blog/?p=772
http://www.mikespook.com/index.php/archives/524
http://hi.baidu.com/ywdblog/blog/item/44e02e9bfe5a87bfc8eaf425.html
http://www.infoq.com/cn/news/2009/09/mongodb
MongoDB 1.6 發布:http://xiexiejiao.cn/database/mongodb-1-6-release.html
http://m.cnblogs.com/66952/1673308.html
MongoDB中文介紹:http://www.mongodb.org/display/DOCSCN/Home
MongoDB文檔首 頁:http://www.mongodb.org/display/DOCS/Home