2012年10月30日 星期二

在 Windows 初次安裝、使用 MongoDB

這篇是簡易記錄文~記錄一下在 Windows 上安裝和小小測試 MongoDB 的過程。

MongoDB 的安裝和使用方法,在官方網站的文件上其實有說蠻多的,可以參考 [1-2]。

在 Windows 上安裝 MongoDB

在下載好 MongoDB 之後,它會是個壓縮檔,解壓縮之後放在某個自己想放的位置
以官網的教學建議是放在 C:\mongodb,不過放在哪都無所謂~自己方便就好。

PS. 為了方便起見,後面都會以 C:\mongodb 當做是 MongoDB 的所在路徑。

接著要先建立 MongoDB 放資料庫的位置,預設會放在 C:\data\db 這個目錄
因此要用檔案總管或其他方式,把這個目錄建立起來,否則啟動 MongoDB 時它會告知找不到路徑而自行關閉。
如果不想要放在這個目錄,要用以下指令去更改路徑,這裡直接用官網的範例,即要改到 D:\test\mongodb\data:
C:\mongodb\bin\mongod.exe --dbpath d:\test\mongodb\data
如果路徑包含空白,例如路徑是「D:\test\mongo db data」的話,可以用雙引號把完整路徑包起來,例如:
C:\mongodb\bin\mongod.exe --dbpath "d:\test\mongo db data"
基本上這樣就完成 MongoDB 的安裝了(咦?!)
嚴格來說它根本也沒什麼好安裝的,就是壓縮檔抓下來解壓縮就好 XD。

啟動 MongoDB
啟動 MongoDB 只要執行以下的指令,就可以啟動 MongoDB 了。
C:\mongodb\bin\mongod.exe

MongoDB 的使用方法
MongoDB 有一些第三方的 UI 可以操作,而原生的方法好像就是用 JavaScript 操作~可以參考 [2]。
在 Windows 上,MongoDB 有提供 JavaScript 的介面,可以輸入 JavaScript 的語法。
進入方法是執行以下的指令:
C:\mongodb\bin\mongo.exe
接著就可以直接執行 MongoDB 的指令或者是其他的 JavaScript 語法了。

MongoDB 基本的指令:
  • use db_name:選擇要使用的資料庫
  • db.collection_name.save(data);:在 collection_name 這個集合裡插入 data 這個資料,其中 data 是一個 JSON 格式的文字。
  • db.collection_name.find(data);:在 collection_name 這個集合裡搜尋出滿足 data 條件的資料。

舉例來說,我想要測試在 MongoDB 裡面建立 100 萬筆隨機的資料,可以輸入以下的語法:
var start = new Date();
for(i=0 ; i<1000000 ; i++)
  db.things.save( {k: Math.ceil(Math.random()*20), j:i} );
var end = new Date();
print(end-start + "ms");
註:在 command-line 模式下,由於這堆指令要馬上接著執行,所以最好是全部弄成一行一次送出
不然想要衡量花費的時間就不準了。

最後印出的結果如下:
112288ms
表示像上面那樣要建立 100 萬筆資料,大約要花掉將近兩分鐘的時間。

上面的測試有呼叫 JavaScript 的 Math.random() 和 Math.ceil() 來取得 0~20 的亂數,總共花的時間是 112.288 秒。
我也有測試了不使用 Math 函式,但同樣加入 100 萬筆資料,花的時間是 107.407 秒,其實差異並不大。

接著我要測試找出所有 k = 1(即具有 {"k": 1} 的資料)的資料,是使用 find() 函式,範例如下:
var count=0;
var start = new Date();
var cursor = db.things.find({k:1});
while(cursor.hasNext()) {
  cursor.next();
  count++;
}
var end = new Date();
print(end-start + "ms");
print(count + " counts");
印出來結果如下:
834ms
50039 counts
而對 k 加上 Index 之後,效果則是變為如下:
593ms
50039 counts


參考資料:
1、Install MongoDB on Windows
2、MongoDB Tutorial

沒有留言: