深入理解MongoDB(一)Linux下配置MongoDB全攻略

Wentasy發表於2014-08-02

一 MongoDB簡介

 

MongoDB是一個高效能,開源,無模式的文件型資料庫,是當前NoSql資料庫中比較熱門的一種。它在許多場景下可用於替代傳統的關係型資料庫或鍵/值儲存方式,Mongo使用C++開發。Mongo的官方網站地址是:http://www.mongodb.org/,讀者可以在此獲得更詳細的資訊。

 

特點:

它的特點是高效能、易部署、易使用,儲存資料非常方便。主要功能特性有:
  • 面向集合儲存,易儲存物件型別的資料。
  • 模式自由。
  • 支援動態查詢。
  • 支援完全索引,包含內部物件。
  • 支援查詢。
  • 支援複製和故障恢復。
  • 使用高效的二進位制資料儲存,包括大型物件(如視訊等)。
  • 自動處理碎片,以支援雲端計算層次的擴充套件性。
  • 支援RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
  • 檔案儲存格式為BSON(一種JSON的擴充套件)。
  • 可通過網路訪問。

 

功能:

  • 面向集合的儲存:適合儲存物件及JSON形式的資料。
  • 動態查詢:Mongo支援豐富的查詢表示式。查詢指令使用JSON形式的標記,可輕易查詢文件中內嵌的物件及陣列。
  • 完整的索引支援:包括文件內嵌物件及陣列。Mongo的查詢優化器會分析查詢表示式,並生成一個高效的查詢計劃。
  • 查詢監視:Mongo包含一個監視工具用於分析資料庫操作的效能。
  • 複製及自動故障轉移:Mongo資料庫支援伺服器之間的資料複製,支援主-從模式及伺服器之間的相互複製。複製的主要目標是提供冗餘及自動故障轉移。
  • 高效的傳統儲存方式:支援二進位制資料及大型物件(如照片或圖片)
  • 自動分片以支援雲級別的伸縮性:自動分片功能支援水平的資料庫叢集,可動態新增額外的機器。

 

適用場景:

  • 網站實時資料處理。它非常適合實時的插入、更新與查詢,並具備網站實時資料儲存所需的複製及高度伸縮性。
  • 快取。由於效能很高,它適合作為資訊基礎設施的快取層。在系統重啟之後,由它搭建的持久化快取層可以避免下層的資料來源過載。
  • 高伸縮性的場景。非常適合由數十或數百臺伺服器組成的資料庫,它的路線圖中已經包含對MapReduce引擎的內建支援。


不適用場景:

  • 要求高度事務性的系統。
  • 傳統的商業智慧應用。
  • 複雜的跨文件(表)級聯查詢。

 

二 MongoDB配置全攻略

 

版本說明:

RedHat:6.1 x86_64

MongoDB:2.6.3

 

首先,我們到官網(http://www.mongodb.org/downloads)下載64位Linux 版的MongoDB;

 

然後,做配置MongoDB之前的準備工作;

--建立MongoDB主目錄
# mkdir /usr/local/mongodb/
--解壓MongoDB包到MongoDB主目錄
# tar -xvf mongodb-linux-x86_64-2.6.3.tgz -C /usr/local/mongodb/
--建立MongoDB資料目錄,可以存放到其他位置,比如RAID、LVM上
# mkdir /usr/local/mongodb/data/
--建立MongoDB日誌目錄,建議放到var目錄下
# mkdir /usr/local/mongodb/log/

接著,我們使用mongod命令啟動MongoDB,再開啟另一個終端,使用mongo命令連線到MongoDB;

# cd /usr/local/mongodb/bin/
# ./mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/log/mongo.log

# ./mongo
MongoDB shell version: 2.6.3
connecting to: test
>

接著,配置環境變數;

# pwd
/usr/local/mongodb/bin
# vim ~/.bash_profile 
# tail -n3 !$
tail -n3 ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mongodb/bin

export PATH
# source !$
source ~/.bash_profile

為了更方便的啟動和關閉MongoDB,我們可以使用Shell寫指令碼,當然也可以加入到service中;

# cp ssh mongodb
# vim mongodb
# cat mongodb

#!/bin/bash
#
# mongod		Start up the MongoDB server daemon
#

# source function library
. /etc/rc.d/init.d/functions

#定義命令
CMD=/usr/local/mongodb/bin/mongod
#定義資料目錄
DBPATH=/usr/local/mongodb/data
#定義日誌目錄
LOGPATH=/usr/local/mongodb/log/mongo.log

start()
{
	#fork表示後臺執行
	$CMD --dbpath=$DBPATH --logpath=$LOGPATH --fork
	echo "MongoDB is running background..."
}

stop()
{
	pkill mongod
	echo "MongoDB is stopped."
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	*)
		echo $"Usage: $0 {start|stop}"
esac

我們可以測試編寫指令碼的正確性;

# /etc/init.d/mongodb start
about to fork child process, waiting until server is ready for connections.
forked process: 1347
child process started successfully, parent exiting
MongoDB is running background...

# /etc/init.d/mongodb stop
Terminated

當然,更好的方式是採用配置檔案,把MongoDB需要的引數寫入配置檔案,然後在指令碼中引用;

$ vim mongodb.conf 
$ cat mongodb.conf 
#代表埠號,如果不指定則預設為27017
#port=27027
#MongoDB資料檔案目錄
dbpath=/usr/local/mongodb/data
#MongoDB日誌檔案目錄
logpath=/usr/local/mongodb/log/mongo.log
#日誌檔案自動累加
logappend=true

編寫好配置檔案後,我們需要修改啟動指令碼;

# vim mongodb 
# cat mongodb 
#!/bin/bash
#
# mongod		Start up the MongoDB server daemon
#

# source function library
. /etc/rc.d/init.d/functions
#定義命令
CMD=/usr/local/mongodb/bin/mongod
#定義配置檔案路徑
INITFILE=/usr/local/mongodb/mongodb.conf
start()
{
	#&表示後臺啟動,也可以使用fork引數
	$CMD -f $INITFILE &
	echo "MongoDB is running background..."
}

stop()
{
	pkill mongod
	echo "MongoDB is stopped."
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	*)
		echo $"Usage: $0 {start|stop}"
esac

編寫完成後,再次測試指令碼的正確性。

# /etc/init.d/mongodb start
MongoDB is running background...

# /etc/init.d/mongodb stop
Terminated


三 後記

這是深入理解MongoDB的第一篇文章,本篇文章簡要地介紹了MongoDB,並把Linux下完整的配置過程呈現給讀者。

 

四 參考資料

http://baike.baidu.com/subview/3385614/9338179.htm


Good Luck!

Robin

2014年8月2日

相關文章