Categories
程式開發

分佈式文件存儲數據庫MongoDB


分佈式文件存儲數據庫MongoDB 1

  

MongoDB 簡介

  

Mongo 並非芒果(Mango)的意思,而是源於Humongous(巨大的;龐大的)一詞。

MongoDB 是一個基於分佈式文件存儲的NoSQL 數據庫。由C++ 語言編寫。旨在為WEB 應用提供可擴展的高性能數據存儲解決方案。關於什麼是NoSQL 可閱讀《學了那麼多NoSQL 數據庫NoSQL 究竟是啥“》

MongoDB 是一個介於關係型數據庫和非關係型數據庫之間的產品,是非關係型數據庫當中功能最豐富,最像關係數據庫的。

  

分佈式文件存儲數據庫MongoDB 2

分佈式文件存儲數據庫MongoDB 3

MongoDB 使用BSON(Binary JSON)對象來存儲,與JSON 格式的鍵值對(key/value)類似,字段值可以包含其他文檔,數組及文檔數組。支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關係型數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

  

MongoDB 歷史

  

2007 年,Dwight Merriman,Eliot Horowitz 和Kevin Ryan 成立10gen 軟件公司,在成立之初,這家的公司目標是進軍雲計算行業,為企業提供雲計算服務。在開發雲計算產品時,他們準備開發一個類似於數據庫的組件,為雲計算產品提供存儲服務。當時是關係型數據庫一統天下的時間,他們覺得傳統的關係型數據庫無法滿足他們的要求,他們想要一款程序員不懂SQL語言也可以使用的數據存儲產品。

在網絡上找了一圈,不管是開源的還是閉源的產品,都沒找到讓他們滿意的東西,既然找不到,那就自己開發吧,反正他們也有那個技術實力,10gen 的創始人都來自谷歌,他們創建的網絡廣告公司DoubleClick 被谷歌收購了,這是他們的第二次創業。

10gen 公司不使用關係型數據庫是有一定原因的,當時他們還在DoubleClick 公司的時候,就吃過關係型數據庫的苦頭。 DoubleClick 是一家網絡廣告公司,服務美國眾多的知名公司,該公司每秒提供40 萬個廣告,但在可伸縮性和敏捷性方面經常遇到困難,因此他們不得不經常自己開發和使用許多自定義數據存儲來解決現有關係型數據庫的不足,這讓他們很是苦惱。

因此他們決定開發一款數據庫產品解決他們在DoubleClick 時遇到的問題,並為自己的雲計算產品提供存儲服務。

MongoDB 最初於2007 年開發,由位於紐約的一個名為10gen 的組織開發,現在被稱為MongoDB Inc.2009 年,經過將近2 年的開發,10gen 開發出了MongoDB 的雛形並將它開源以及正式命名為MongoDB,同時成立開源社區,通過社區運營MongoDB。 2009 年02 月MongoDB 1.0 發布,提供了大部分基本的查詢功能。 2009 年12 月MongoDB 1.2 發布,引入了map-reduce,支持大規模數據處理。 MongoDB 的第一個真正產品是從2010 年03 月發布的MongoDB 1.4 版本開始的。 2010 年8 月MongoDB 1.6 發布,引入了一些主要特性,比如用於水平伸縮的分片、具備自動故障轉移能力的副本集以及對IPv6 的支持。 2012 年05 月23 日,MongoDB 2.1 發布。該版本採用全新架構,包含諸多增強。 2012 年06 月06 日,MongoDB 2.0.6 發布,分佈式文檔數據庫。 2012 年8 月MongoDB 2.2 發布,引入了聚合管道,可以將多個數據處理步驟組合成一個操作鏈。 2013 年MongoDB 推出第一款商業版本MongoDB Enterprise Advanced。 2013 年04 月23 日,MongoDB 2.4.3 發布,此版本包括了一些性能優化,功能增強以及bug 修復。 2013 年08 月20 日,MongoDB 2.4.6 發布,仍然是以性能優化,功能增強和bug 修復為主。 2015 年03 月MongoDB 3.0 發布,包含了新的WiredTiger 存儲引擎、可插拔存儲引擎API、增加了50 個副本集限制和安全改進。同年晚些時候又發布了3.2 版本,支持文檔驗證、部分索引和一些主要的聚合增強。 2016 年MongoDB 推出了Atlas 服務,MongoDB Atlas,與公有云服務廠商(谷歌、微軟Azure)合作。這一年,MongoDB 爆出了非常嚴重的安全門事件,黑客通過MongoDB 的默認監聽地址0.0.0.0 刪除數據,並且通過此漏洞進行勒索,支付0.2 到0.5 的比特幣就可以恢復數據。 2017 年10 月MongoDB 公司成立10 週年之際,順利通過IPO 在紐交所上市。開盤24 美元,公司估值達到16 億美元,並獲得1.92 美元的籌資。 2017 年11 月MongoDB 3.6 發布,為多集合連接查詢、變更流和使用JSON 模式進行文檔驗證提供了更好的支持。 2018 年06 月MongoDB 4.0 發布,這一版本的發布獲得了廣泛的關注,提供了跨文檔事務處理能力。這是一個重要的里程碑,MongoDB 已經為高數據完整性需求做好了準備。 2019 年03 月18 日,Forrester 授予MongoDB NoSQL 領導者稱號。 2019 年10 月MongoDB 4.2 發布,開始支持分佈式事務。截至2020 年10 月,MongoDB 的社區版版本是4.4.1,擴展性和性能增強,降低複製延遲,可用性和容錯性增強,查詢能力和易用性增強,MongoDB 雲平台的功能更新。 MongoDB 逐漸的從一個專注於數據庫服務的廠商,轉變為提供數據平台服務的廠商。

截至2020 年,MongoDB 的全球下載量達到了1.1 億次。 MongoDB 公司目前有2000 多名員工,有超過18000 名付費客戶,其中有很多客戶同時使用MongoDB Atlas 和MongoDB 企業版。大多數大公司在內部的一些場景中仍然使用的是社區版。 MongoDB 社區版仍然是開源的,除了一些關鍵特性外,它與MongoDB 企業版差不多。

  

MongoDB 支持語言

  

分佈式文件存儲數據庫MongoDB 4

  

MongoDB 與關係型數據庫術語對比

  

分佈式文件存儲數據庫MongoDB 5

分佈式文件存儲數據庫MongoDB 6

MongoDB 數據類型

  

分佈式文件存儲數據庫MongoDB 7

  

MongoDB 下載與安裝

  

下載

  

官網:https://www.mongodb.com/

下載地址:https://www.mongodb.com/try/download/community

在頁面中選擇MongoDB Community Server 社區版,根據自己的系統選擇對應的版本,我自己使用的是CentOS 版本。而MongoDB 只有RedHat 版本,下載使用即可。

CentOS 是Community ENTerprise Operating System 的簡稱,也可以叫它社區企業操作系統,是Linux 操作系統中的一個發行版本。

>

CentOS 並不是全新的Linux 發行版,它是Red Hat 家族發行的企業版的產品Red Hat Enterprise Linux(以下稱之為RHEL)的克隆版本。 RHEL 是很多企業採用的Linux 發行版本,需要向Red Hat 付費才可以使用,並能得到付費對應的服務,技術支持和版本升級。 CentOS 可以像RHEL 一樣的構築Linux 系統環境,但不需要向Red Hat 支付任何的產品和服務費用,同時也得不到任何有償技術支持和升級服務。

分佈式文件存儲數據庫MongoDB 8

  

還可以通過:https://docs.mongodb.com/manual/installation/ 確認該版本軟件是否支持你的操作系統。

分佈式文件存儲數據庫MongoDB 9

  

安裝

  

將資源上傳至服務器/usr/local/src,解壓至/usr/local 並重命名為mongodb。

# 创建 mongodb 目录
mkdir -p /usr/local/mongodb
# 解压 mongodb 至指定目录
tar -zxvf /usr/local/src/mongodb-linux-x86_64-rhel70-4.4.1.tgz -C /usr/local/
# 重命名解压目录为 mongodb
mv /usr/local/mongodb-linux-x86_64-rhel70-4.4.1/ /usr/local/mongodb

  

創建數據/日誌目錄

  

創建用於存放數據和日誌的文件夾,並修改其權限增加讀寫權限。

# 创建存放数据的目录
mkdir -p /usr/local/mongodb/data/db
# 创建存放日志的目录
mkdir -p /usr/local/mongodb/logs
# 创建日志记录文件
touch /usr/local/mongodb/logs/mongodb.log

  

啟動MongoDB

  

前台啟動

  

MongoDB 的默認啟動方式為前台啟動。所謂的前台啟動就是MongoDB 啟動進程後會佔用當前的終端窗口。

# 切换至指定目录
cd /usr/local/mongodb/
# 前台启动
bin/mongod --dbpath /usr/local/mongodb/data/db/ --logpath /usr/local/mongodb/logs/mongodb.log --logappend --port 27017 --bind_ip 0.0.0.0

–dbpath:指定數據文件存放目錄–logpath:指定日誌文件,注意是指定文件不是目錄–logappend:使用追加的方式記錄日誌–port:指定端口,默認為27017–bind_ip:綁定服務IP,若綁定127.0.0.1,則只能本機訪問,默認為本機地址

  

後台啟動

  

所謂的後台啟動就是以守護進程的方式啟動MongoDB。命令中添加–fork 即可。

# 后台启动
bin/mongod --dbpath /usr/local/mongodb/data/db/ --logpath /usr/local/mongodb/logs/mongodb.log --logappend --port 27017 --bind_ip 0.0.0.0 --fork

通過命令啟動的方式並不適合管理,畢竟每次輸入命令都需要考慮各參數的配置。我們可以通過配置文件來配置啟動參數,然後通過指定配置文件的方式啟動服務,這樣在管理MongoDB 上就比較方便了。

  

配置文件

  

在bin 目錄下增加一個mongodb.conf 配置文件。

# 数据文件存放目录
dbpath = /usr/local/mongodb/data/db
# 日志文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log
# 以追加的方式记录日志
logappend = true
# 端口默认为 27017
port = 27017
# 对访问 IP 地址不做限制,默认为本机地址
bind_ip = 0.0.0.0
# 以守护进程的方式启用,即在后台运行
fork = true

  

啟動

  

# 切换至指定目录
cd /usr/local/mongodb/
# 指定配置文件的方式启动服务
bin/mongod -f bin/mongodb.conf

  

客戶端訪問

  

可以通過bin 目錄中的mongo 來訪問MongoDB 服務器。

命令為:bin/mongo –host 連接的主機地址(默認127.0.0.1) –port 端口(默認27017)

[[email protected] mongodb]# bin/mongo
MongoDB shell version v4.4.1
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("2bf54fad-83bc-444c-8bee-166a224445b8") }
MongoDB server version: 4.4.1
---
The server generated these startup warnings when booting:
2020-10-21T10:47:44.855+08:00: ***** SERVER RESTARTED *****
2020-10-21T10:47:47.024+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2020-10-21T10:47:47.024+08:00: You are running this process as the root user, which is not recommended
2020-10-21T10:47:47.024+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
2020-10-21T10:47:47.024+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
2020-10-21T10:47:47.024+08:00: Soft rlimits too low
2020-10-21T10:47:47.024+08:00: currentValue: 1024
2020-10-21T10:47:47.024+08:00: recommendedMinimum: 64000
---
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).

The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.

To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>

  

help 幫助命令。

> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce

show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell

  

db.version() 查看版本信息。

> db.version()
4.4.1

  

show dbs 查看所有數據庫。

> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

這裡先簡單通過客戶端進行訪問測試,後面會詳細羅列客戶端操作MongoDB 數據庫、集合、文檔、索引、內置函數等相關的操作。

  

關閉MongoDB

  

前台啟動關閉

  

使用Ctrl + c 即可關閉。

  

後台啟動關閉

  

使用–shutdown 參數即可關閉。

# 命令启动方式的关闭
bin/mongod --dbpath /usr/local/mongodb/data/db/ --logpath /usr/local/mongodb/logs/mongodb.log --logappend --port 27017 --bind_ip 0.0.0.0 --fork --shutdown
# 配置文件启动方式的关闭
bin/mongod -f bin/mongodb.conf --shutdown

  

kill 命令關閉

  

通過kill -9 的方式強制關閉進程,一般這種方式都不怎麼推薦使用。

# 查看 mongodb 运行的进程信息
ps -ef | grep mongodb
# kill -9 强制关闭
kill -9 pid

分佈式文件存儲數據庫MongoDB 10

  

MongoDB 函數關閉

  

連接到MongoDB 服務後,切換到admin 數據庫,並使用相關函數關閉服務。

# 连接 mongodb
bin/mongo
# 切换 admin 数据库
use admin
# 执行以下函数(2选1)即可关闭服务
db.shutdownServer()
db.runCommand(“shutdown”)

  

環境變量

  

每次操作MongoDB 都需要進入具體的目錄才行,比如啟動服務,客戶端進行連接等,可不可以在任意目錄都能進行操作。答案當然是可以的,只需要將MongoDB 相關目錄添加至系統環境變量即可。

先通過vim /etc/profile 編輯系統環境變量文件,添加以下內容。

# 添加环境变量
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin

然後通過source /etc/profile 重新加載系統環境變量。這樣在系統任意目錄下都可以直接操作MongoDB 了。

分佈式文件存儲數據庫MongoDB 11

本文講解了MongoDB 的一些入門級內容,教會了大家如何基於Linux 環境下載與安裝MongoDB。下文我們先從安全問題入手,看看MongoDB 未加密導致的慘痛經歷與教訓,順便再教大家一波實用的解決方案。

分佈式文件存儲數據庫MongoDB 12

本文采用 知識共享「署名-非商業性使用-禁止演繹4.0 國際」許可協議“。

大家可以通過 分類” 查看更多關於 MongoDB” 的文章。

🤗 您的點贊和轉發是對我最大的支持。

📢 掃碼關注哈嘍沃德先生「文檔+ 視頻」每篇文章都配有專門視頻講解,學習更輕鬆噢 ~

分佈式文件存儲數據庫MongoDB 13

分佈式文件存儲數據庫MongoDB 14