顯示具有 MongoDB 標籤的文章。 顯示所有文章
顯示具有 MongoDB 標籤的文章。 顯示所有文章

2016年1月11日 星期一

在 Ubuntu 14.04 安裝 MongoDB 3.2:使用 WiredTiger 儲存引擎

這篇主要是嘗試在 Ubuntu 14.04 的環境中,使用 6 台主機建置一個基於 WiredTiger 引擎的 MongoDB 叢集。
其中會以兩台主機建成 Shard 的 replica set、以三台主機建成 Config 的 replica set,並以一台主機作為 Mongos

2014年9月18日 星期四

MongoDB 監控:使用 MongoDB Management Service

MongoDB 官方有提供 MongoDB Management Service (MMS) 這個服務
可以用來監控指定的 MongoDB 資料庫,並且畫出還蠻詳細的曲線圖供使用者分析自己的資料庫運作狀況。


MMS 主要有提供監控和備援的能力,其中監控的部份是免費的、備援則是必須付費。
同時 MMS 提供了雲端版的服務和獨立安裝版,前者可以直接把統計資料送到 MongoDB 營運的 MMS 服務,後者則是自己維護一台自有的 MMS 主機。
對前者來說,使用者只需要註冊一個 MMS 的帳號,然後在能夠存取想監控的 MongoDB 的一台主機上安裝監控的代理人程式即可。
不過如果有些監控的功能想使用(例如 profiling 功能,會送出每個 MongoDB 接受的指令到 MMS 上),但又不希望這些資料被送上雲端
就可以改用後者,自己安裝自己的 MMS 囉。

2014年2月12日 星期三

設定 MongoDB 中資料的存活時間(TTL)

自從 MongoDB 2.2 以後,開始支援一個算是常用的功能,可以直接在 collection 上設定資料的存活時間
例如假設插入一筆資料後,希望它在兩小時後自動消失,過去的作法是要自己實作 daemon 去檢查
不過在 MongoDB 2.2 開始,MongoDB 會幫忙做這件事,只要在 collection 上做好設定即可。

2014年1月15日 星期三

透過 Java driver 做 MongoDB sharding

在 MongoDB cluster 的環境中,即使 MongoDB 已經做成 Mongos 了,預設資料都還是會全部集中在同一台資料庫上
持續對資料庫做資料寫入時,資料越多速度會越慢,而且也可以發現都是同一台伺服器很忙
主因就是因為沒有做 DB 和 collection 的 sharding。

2013年9月13日 星期五

使用 MongoDB 的 Java Driver 搜尋帶有斜線 (/) (slash) 的 Regex

由於 MongoDB 的 Java driver 在某個版本以後開始支援 Pattern 物件
因此要在 Java 上使用 Java driver 做 regular expression 時就簡單多了
只要自己先編譯好 Pattern 的物件,直接把 Pattern 丟到 DBObject 的 value 欄位就好了。

2013年7月10日 星期三

(書籤) MongoDB transaction

暫存一下,還沒有很仔細在看內容,不過大略看了一下,有注意到這個實作 MVCC 的 transaction 的方法
每 commit N 個操作,必須送出 2N+2 個資料庫指令....
不知道這划不划算~目前覺得好像有點不划算。

參考資料:
1、MongoDB transactions?
2、GitHub:MongoDB transaction example

2013年6月21日 星期五

在 Java 中取得 MongoDB 剛插入的資料的 ObjectID

這問題就跟一般 RDBMS 想在資料插入後取得自動產生的 ID 是一樣的意思~
不過在 MongoDB 上,這個問題相對似乎簡單了許多~。

2013年5月30日 星期四

MongoDB 的特性

記錄一下同事在做 MongoDB 的效率測試時發現的一些特性(測試的版本是 MongoDB v2.4.3):

2013年5月24日 星期五

(書籤) 有關 MongoDB 的 AGPL-3.0 授權條款

今天被問到有關 AGPL-3.0 條款,是否需要讓專案 Open Source 的問題
稍微查了一下之後,發現 OpenFoundary 有蠻詳細的案例解說!
簡而言之,一般狀況下只要沒有對 MongoDB 的資料庫核心做任何修改,原則上並不需要跟著使用 AGPL-3.0 授權並開源。

2013年3月22日 星期五

實作 MongoDB 的 tail 指令

當資料放在 MongoDB 上時,有時會想要用類似 Linux 的 tail 指令來觀察新增的資料的狀態~
這時可以利用以下的 script 來達成!

2013年3月15日 星期五

用 Daemon 的方式開啟及關閉 MongoDB

開啟 MongoDB:
mongod --smallfiles --fork --logpath /mongo.log
其中 /mongo.log 是讓 MongoDB 寫入 Log 的位置,必須是一個檔案路徑。如果該檔案已經存在時,MongoDB 會自動產生 "檔名*" 的檔案。
例如這裡用的檔名是 mongo.log,因此當檔案已存在時,MongoDB 產生的 Log 檔會是 mongo.log* 的形式。

2012年11月8日 星期四

提昇 MongoDB 的讀取效能

在我們專案裡面有個 MongoDB 的資料庫,在測試時發現裡面的 19 萬筆資料全倒出來時
花費的時間相當可觀,平均大約是 10~15 秒左右!
但 19 萬筆資料並不算是很龐大的資料,理論上不應該出現這種結果
因此花了些時間查詢有沒有方法可以提昇效率~。

邊查邊測了大概兩天,其實沒查到什麼方法
倒是有發現如果直接在 MongoDB 的 shell 上面輸入同樣的語法時,shell 只要花不到 3 秒就可以取完所有的 document。

2012年11月1日 星期四

測試 MongoDB 的效能

設定了一個情境,假設我有 100 萬個檔名不同的檔案,隨機放在以下八個資料夾

/user_c/
/user_c/application/
/user_a/log/user_c/
/user_a/log/webserver/
/user_b/
/user_b/application/
/user_b/log/
/user_b/log/webserver/

那麼當我想要知道 /user_c/ 這個資料夾有哪些檔案和資料夾時,MongoDB 可以多快幫我找出來?

用 Java 存取 MongoDB

要透過 Java 連接、插入和讀取 MongoDB,方法其實在官方的文件 [1] 中寫得蠻清楚的~
以下直接轉貼官方的範例。

連接 MongoDB
Mongo m = new Mongo();
DB db = m.getDB( "mydb" );
DBCollection coll = db.getCollection("testCollection");
在產生 Mongo 的實體時,如果沒有輸入任何參數,會自動使用 MongoDB 預設的 localhost:27017 來連接。
有需要的時候可以自行指定位址和連接埠,另外也可以用 ServerAddress 的方式來表達多個 MongoDB 的位址(用於 sharding)。

初始化 Mongo 的實體之後,可以使用 getDB() 來指定要使用的資料庫名稱,然後再使用 getCollection() 選定目前要存取的集合名稱。

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。

2012年10月29日 星期一

MongoDB Concurrency

MongoDB 的 concurrency 的資料,感覺好像比較難查....

Global Write Lock / Yield Lock (Locking-With-Yield)

首先是關於在 MongoDB v2.0 以前(含 2.0)的版本,MongoDB 具有兩個特性:global write lock 和 yielding lock。
詳情可以參考看看 [2-4],以下說明大略是出自 [2] 的說法~。