1. 程式人生 > >爬蟲資料庫MongoDB的介紹

爬蟲資料庫MongoDB的介紹

  • MongoDB (名稱來自「humongous (巨大無比的)」), 是一個可擴充套件的高效能,開源,模式自由,面向文件的NoSQL,基於 分散式 檔案儲存,由 C++ 語言編寫,設計之初旨在為 WEB 應用提供可擴充套件的高效能資料儲存解決方案。
  • MongoDB使用的是記憶體對映儲存引擎,它會把磁碟IO操作轉換成記憶體操作,如果是讀操作,記憶體中的資料起到快取的作用,如果是寫操作,記憶體還可以把隨機的寫操作轉換成順序的寫操作,大幅度提升效能。
  • MongoDB 既擁有Key-Value儲存方式的高效能和高度伸縮性,也擁有傳統的RDBMS系統的豐富的功能,集兩者的優勢於一身。 介於關係資料庫和NoSQL之間,也是功能最豐富、最像關係資料庫的的NoSQL。

MongoDB官方文件:https://docs.mongodb.com

MongoDB中文社群:http://www.mongoing.com

MongoDB特點:

  • 模式自由 :可以把不同結構的文件儲存在同一個資料庫裡
  • 面向集合的儲存:適合儲存 JSON風格檔案的形式,
  • 完整的索引支援:對任何屬性可索引,
  • 複製和高可用性:支援伺服器之間的資料複製,支援主-從模式及伺服器之間的相互複製。複製的主要目的是提供冗餘及自動故障轉移。
  • 自動分片:支援水平的資料庫叢集,可動態新增額外的機器。
  • 豐富的查詢:支援豐富的查詢表達方式,查詢指令使用JSON形式的標記,可輕易查詢文件中的內嵌的物件及陣列。
  • 快速就地更新:查詢優化器會分析查詢表示式,並生成一個高效的查詢計劃。
  • 高效的傳統儲存方式:支援二進位制資料及大型物件(如圖片等...)。

根據DB-Engines的排名統計,MongoDB綜合排名第五(2017年10月資料,前四名分別是Oracle,MySQL,SQL Server,PostgreSQL),在NoSQL領域(非RDBMS)裡排名第一。
適用場景

  • 網站資料: 適合實時的插入,更新與查詢,並具備網站實時資料儲存所需的複製及高度伸縮性。
  • 快取: 由於效能很高,也適合作為資訊基礎設施的快取層。在系統重啟之後,搭建的持久化快取可以避免下層的資料來源過載。
  • 高伸縮性的場景: 非常適合由數十或者數百臺伺服器組成的資料庫。
    用於物件及JSON資料的儲存: MongoDB的BSON資料格式非常適合文件格式化的儲存及查詢。

不適用的場景

  • 高度事物性的系統: 例如銀行或會計系統。傳統的關係型資料庫目前還是更適用於需要大量原子性複雜事務的應用程式。
  • 需要使用SQL語句解決的場景: MongoDB不支援SQL語句。

下載mongodb的版本,兩點注意

根據業界規則,偶數為穩定版,如3.2.X;奇數為開發版,如3.3.X
32bit的mongodb最大隻能存放2G的資料,64bit就沒有限制。
MongoDB官網安裝包下載地址:http://www.mongodb.org/downloads

MongoDB安裝文件:https://docs.mongodb.com/getting-started/shell/installation/

Ubuntu下安裝MongoDB:

[email protected]:~$ sudo apt-get install mongodb

使用MongoDB,需要先啟動服務端,再使用客戶端連線資料庫。
服務端

MongoDB 預設的儲存資料目錄為 /data/db,預設埠27017

服務的命令為mongod,可以通過help檢視所有引數

[email protected]:~$ mongod --help
  • 相關檔案存放路徑:預設各個檔案存放路徑如下所示:
  • 可執行檔案存放路徑:/usr/bin/mongod 和 /usr/bin/mongo
  • 資料庫檔案存放路徑:/data/db
  • 日誌檔案存放路徑:/var/log/mongodb/mongod.log
  • 配置檔案存放路徑:/etc/mongod.conf

啟動注意事項:

  1. 首次啟動:
  • 啟動MongoDB服務: sudo mongod
    報出如下錯誤,表示預設的儲存資料目錄 /data/db 不存在:

[initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating

  • 建立 /data目錄和 /data/db 目錄,並指定 讀/寫/執行 許可權
[email protected]:~$ sudo mkdir -p /data/db
[email protected]:~$ sudo chmod 777 /data/db
  1. 再次啟動:
  • 再次啟動MongoDB服務: sudo mongod
    啟動成功,但是可能會有如下警告:
#### 此乃 Warning 1:
[initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
[initandlisten] **        We suggest setting it to 'never'
[initandlisten] 
[initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
[initandlisten] **        We suggest setting it to 'never'

#### 此乃 Warning 2:
[initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.

#### 此乃 Warning 3:
[initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

注意:這裡的三個Warning並非必須處理,大家瞭解即可:
Warning 1:

[initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 
[initandlisten] ** We suggest setting it to 'never' [initandlisten] 
[initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. [initandlisten] ** We suggest setting it to 'never'

Linux的記憶體分配預設由核心動態分配,而不是由程式自行管理。而MongoDB對記憶體佔用有那麼點...嚴重,所以為了防止MongoDB佔用記憶體過大而被核心"管理",官方推薦關閉動態分配。

預設"always"表示允許動態分配,對應的"never"就是不允許,所以我們將這兩個檔案內容修改為"naver"後就沒有warning了。

# Ctrl + c 退出 MongoDB 資料庫服務
# 然後進入 root 使用者下,執行修改命令

[email protected]:~$ sudo su
[sudo] python 的密碼: 

[email protected]:~# sudo echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
[email protected]:~# sudo echo "never" >  /sys/kernel/mm/transparent_hugepage/defrag

實際上,除非網站DBA對資料庫效能有極限要求,在通常情況下系統動態分配的記憶體頁大小足夠我們正常使用,而且更能優化整個系統,所以一般不必理會這個warning。而且這樣只是臨時修改Linux核心的設定,在Linux伺服器重啟後則會失效。
Warning 2:

[initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.

這個WARNING(如果有的話)含義為: 表示預設分配給MongoDB的程序和檔案數量限制過低,需要重新分配值:

  • mongodb當前限制:1024 processes, 64000 files
  • mongodb建議要求:processes = 0.5*files=32000(至少)
    咱們學習階段預設用不著這麼多的程序和檔案,所以也可以不必理會。
# 開啟 相關配置檔案:
[email protected]:~# vi /etc/security/limits.conf

# 在開啟的 檔案最下方,新增,然後儲存退出
mongod  soft  nofile  64000
mongod  hard  nofile  64000
mongod  soft  nproc  32000
mongod  hard  nproc  32000

Warning 3:

[initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

意思是我們在用root許可權做這些事,理論上是不安全的。我們可以通過附加--auth引數,來使用使用者認證來處理這個情況,這個後面會講到。

  1. 再再次啟動:
  • 再再次啟動MongoDB服務: sudo mongod
    啟動後檢視程序,以確定是否啟動成功
[email protected]:~$ ps aux | grep mongod
  • 如果程序中沒有mongod的項則沒有啟動成功,可以通過檢視日誌來確定錯誤原因,預設日誌檔案為 /var/log/mongodb/mongod.log,最新的資訊在最後面顯示。

客戶端

  • 客戶端命令為 mongo,可以通過help檢視所有引數。
  • 這個shell即是mongodb的客戶端,用來對MongoDB進行操作和管理的互動式環境。
[email protected]:~$ mongo --help
  • 終端退出連線
> exit

(或Ctrl+C)

本文最終解釋權歸本文作者所有,未經允許不得私自轉載