白話MongoDB(三)
通過源代碼編譯安裝好MongoDB之后,接下來需要配置運行。在MongoDB的安裝目錄,有幾個子目錄,bin下面是可執行文件,包括:
- mongod:數據庫服務端,類似mysqld,每個實例啟動一個進程,可以fork為Daemon運行
- mongo:客戶端命令行工具,類似sqlplus/mysql,其實也是一個js解釋器,支持js語法
- mongodump/mongorestore:將數據導入為bson格式的文件/將bson文件恢復為數據庫,類似xtracbackup
- mongoexport/mongoimport:將collection導出為json/csv格式數據/將數據導入數據庫,類似mysqldump/mysqlimport
- bsondump:將bson格式的文件轉儲為json格式的數據
- mongos:分片路由,如果使用了sharding功能,則應用程序連接的是mongos而不是mongod
- mongofiles:GridFS管理工具
- mongostat:實時監控工具
最簡單的,通過執行mongod即可以啟動MongoDB數據庫服務,mongod支持很多的參數,但都有默認值,其中最重要的是需要指定數據文件路徑,或者確保默認的/data/db存在并且有訪問權限,否則啟動后會自動關閉服務。Ok,那也就是說,只要確保dbpath就可以啟動MongoDB服務了:
Fri Apr 1 00:34:46 [initandlisten] MongoDB starting : pid=31978 port=27017 dbpath=/tmp 32-bit
** 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
** with --dur, the limit is lower
Fri Apr 1 00:34:46 [initandlisten] db version v1.8.0, pdfile version 4.5
Fri Apr 1 00:34:46 [initandlisten] git version: 9c28b1d608df0ed6ebe791f63682370082da41c0
Fri Apr 1 00:34:46 [initandlisten] build sys info: Linux ning 2.6.36-ningoo #1 SMP
Wed Nov 17 21:45:13 CST 2010 i686 BOOST_LIB_VERSION=1_42
Fri Apr 1 00:34:46 [initandlisten] waiting for connections on port 27017
Fri Apr 1 00:34:46 [websvr] web admin interface listening on port 28017
mongod的主要參數有:
dbpath: 數據文件存放路徑,每個數據庫會在其中創建一個子目錄。用于防止同一個實例多次運行的mongod.lock也保存在此目錄中。
logpath:錯誤日志文件
logappend: 錯誤日志采用追加模式(默認是覆寫模式)
bind_ip: 對外服務的綁定ip,一般設置為空,及綁定在本機所有可用ip上,如有需要可以單獨指定
port: 對外服務端口。Web管理端口在這個port的基礎上+1000
fork: 以后臺Daemon形式運行服務
journal:開啟日志功能,通過保存操作日志來降低單機故障的恢復時間,在1.8版本后正式加入,取代在1.7.5版本中的dur參數。
syncdelay: 執行sync的間隔,單位為秒。
directoryperdb: 每個db存放在單獨的目錄中,建議設置該參數。
maxConns: 最大連接數
repairpath: 執行repair時的臨時目錄。在如果沒有開啟journal,異常宕機后重啟,必須執行repair操作。
在源代碼中,mongod的參數分為一般參數,windows參數,replication參數,replica set參數,以及隱含參數。上面列舉的都是一般參數。如果要配置replication,replica set等,還需要設置對應的參數,這里先不展開,后續會有專門的文章來講述。執行mongo –help可以看到對大多數參數的解釋。但有一些隱含參數,則只能通過看代碼來獲得(見db.cpp po::options_description hidden_options(“Hidden options”);),隱含參數一般要么是還在開發中,要么是準備廢棄,因此在生產環境中不建議使用。
可能你已經注意到,mongod的參數中,沒有設置內存大小相關的參數,是的,mongodb使用os mmap機制來緩存數據文件數據,自身目前不提供緩存機制。這樣好處是代碼簡單,mmap在數據量不超過內存時效率很高。但是數據量超過系統可用內存后,則寫入的性能可能不太穩定,容易出現大起大落,不過在最新的1.8版本中,這個情況相對以前的版本已經有了一定程度的改善,具體請參考realzyy的測試。
這么多參數,全面寫在命令行中則容易雜亂而不好管理。因此,mongod也和mysqld一樣支持將參數寫入到一個配置文本文件中,然后通過config參數來引用此配置文件:
至此,已經成功的運行了一個單機的mongodb實例。