Mongodb學習記錄:入門(一)

預熱看我以前的文章Node學習記錄: mongodbhtml

這個系列旨在系統的學習Mongodblinux

使用windows的同窗能夠看這篇文章MongoDB開發學習git

學習目標

圖片描述

圖片描述

圖片描述

圖片描述

MongoDB官網: https://www.mongodb.com/
MongoDB中文社區: http://www.mongoing.com/
mongodb github: https://github.com/mongodb

關係型數據庫 與 非關係型數據庫

MongoDB是一個面向文檔(document-oriented)的數據庫,而不是關係型數據庫。不採用關
系模型主要是爲了得到 更好的擴展性。固然, 還有其餘一些好處。
圖片描述

與關係型數據庫相比,面向文檔的數據庫再也不有(row)的概念,取而代之的是更爲靈活的文檔(document)模型。經過在文檔中嵌入文檔和數組,面向文檔的方法可以僅使用一條記錄來表現複雜的層次關係,這與使用現代面嚮對象語言的開發者對數據的見解一致。github

另外,再也不有預約義模式( predefined schema):文檔的鍵( key)和值( value)再也不是固定的類型和大小。因爲沒有固定的模式,根據須要添加或刪除字段變得更容易了。一般,因爲開發 者可以進行快速迭代,因此開發進程得得以加快。並且,實驗更容易進行。開發者能嘗試大量的數據模型,從中選擇一個最好的。
MongoDB並不具有一些在關係型數據庫中很廣泛的功能,如鏈接( join)和複雜的多行事務( multirow transaction)。省略這些功能是出於架構上的考慮(爲了獲得更好的擴展性),由於在 分佈式系統中這兩個功能難以高效地實現。

基礎概念

  • 文檔是MongoDB中數據的基本單元,很是相似於關係型數據庫管理系統中的,但更具表現力
  • 集合(collection)能夠看做是一個擁有動態模式(dynamic schema)的表
  • MongoDB的一個實例能夠擁有多個互相獨立的數據庫(database),每一個數據庫都擁有本身的集合
  • 每一個文檔都有一個特殊的鍵"_id",這個鍵在文檔所屬的集合中惟一的。
  • MongoDB自帶一個簡單但功能強大的JavaScript shell可用於管理MongDB的實例 或 數據操做

文檔

  • 文檔就是鍵值對的一個有序集

{"x" : 1, "y":2}{"y": 2, "x": 1}是不一樣的mongodb

一般,字段順序並不重要,無須讓數據庫模式依賴特定的字段順序(MongoDB會對字段從新排序)。

在某些特殊狀況下,字段順序變得很是重要

一些編程語言對文檔的默認表示根本就不包含順序問題(如:Python中的字典、Perl和Ruby
 1.8中的散列)。一般,這些語言的驅動具備某些特殊的機制,能夠在必要時指定文檔的順序。
  • MongoDB不但區分類型,並且區分大小寫

下面的兩個文檔是不一樣的shell

{"foo" : 3}
{"foo" : "3"}

下面兩個文檔也是不一樣的數據庫

{"foo" : 3}
{"Foo" : 3}
  • MongoDB的文檔不能有重複的鍵

下面的文檔是非法的:npm

{"greeting" : "Hello, world!", "greeting" : "Hello, MongoDB!"}

集合

  • 集合就是一組文檔。

若是將MongoDB中的一個文檔比喻爲關係型數據庫中的一行,那麼一個集合就至關於一張表。編程

  • 動態模式

一個集合裏面的文檔能夠是各式各樣的,這意味着,下面兩個文檔能夠存儲在同一個集合裏面:ubuntu

{"greeting" : "Hello, world!"}
{"foo" : 5}

————> 這裏引起一個問題:

由於集合裏面能夠放置任何文檔,還有必要使用多個集合嗎?(既然沒有必要區分不一樣類型文檔的模式,爲何還要使用多個集合呢)

  • 若是把各類各樣的文檔不加區分地放在同一個集合裏,不管對開發者仍是對管理員來

說都將是噩夢。開發者要麼確保每次查詢只返回特定類型的文檔,要麼讓執行查詢的應用程序來處理全部不一樣類型的文檔。若是查詢博客文章時還要剔除含有做者數據的 文檔,這會帶來很大困擾。

  • 在一個集合裏查詢特定類型的文檔在速度上也很不划算,分開查詢多個集合要快得多。例如,假設集合裏面一個名爲"type"的字段用於指明文檔是skim、whole仍是 chunky monkey。那麼,若是從一個集合中查詢這三種類型的文檔,速度會很慢。但若是將這三種不一樣類型的文檔拆分爲三個不一樣的集合,每次只須要查詢相應的集合,速 度快得多。
  • 把同種類型的文檔放在一個集合裏,數據會更加集中。從一個只包含博客文章的集合裏查詢幾篇文章,或者從同時含文章數據和做者數據的集合裏查出幾篇文章,相比之下,前者須要的磁盤尋道操做更少。建立索引時,須要使用文檔的附加結構(特別是建立惟一索引時)。索引是按照集合來定義的。在一個集合中只放入一種類型的文檔,能夠更有效地對集合進行索引。

上面這些重要緣由促使咱們建立一個模式,把相關類型的文檔組織在一塊兒,儘管MongoDB對此並無強制要求。

數據庫

在MongoDB中,多個文檔組成集合,而多個集合能夠組成數據庫。一個MongoDB實例能夠承載多個數據庫,每一個數據庫擁有0個或者多個集合。每一個數據庫都有獨立的權限,即使是在磁盤上,不一樣的數據庫也放置在不一樣的文件中。按照經驗,咱們將有關一個應用程序的全部數據都存儲在同一個數據庫中。要想在同一個MongoDB服務器上存放多個應用程序或者 用戶的數據,就須要使用不一樣的數據庫。

安裝

Linux平臺安裝MongoDB

或者

在 Ubuntu 16.04 上安裝 MongoDB 可參考 MongoDB Docs

//非二進制包安裝方式
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
$ echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org

這樣安裝默認端口是27017

先啓動mongod

sudo service mongod start

圖片描述
圖片描述

在 CentOS 7 上安裝 MongoDB 可參考 MongoDB Docs

$ sudo vi /etc/yum.repos.d/mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
$ sudo yum install -y mongodb-org

圖片描述

  • mongod : mongodb數據庫的執行程序(數據庫部署使用這個程序)
  • mongo :用來鏈接mongodb數據服務器的客戶端,對數據的全部操做,須要先使用mongo客戶端鏈接到mongodb服務器以後才能進行
  • mongoimport mongoexport 用來作mongodb的導入導出
  • mongodump mongorestore用來導入導出二進制數據,不能被直接讀取,通常作數據的備份與恢復
  • mongooplog 用來作操做日誌的回放,oplog是mongodb複製集中用來記錄操做記錄的數據集合
  • mongostat 查看各類狀態

搭建簡單的mongodb服務器

圖片描述

圖片描述

圖片描述

圖片描述

搭建MongoDB服務器以後,須要使用客戶端鏈接,才能進行操做。

鏈接方法:

圖片描述

  • 使用編譯時候生成的客戶端鏈接

圖片描述

  • 使用各類驅動鏈接

關閉服務

  • kill進程

在kill進程時候須要注意須要使用 kill-15 或者kill不加任何參數,不要使用kill-9
Linux kill -9 和 kill -15 的區別

  • db.shutdownServer()
use admin
db.shutdownServer()

圖片描述
圖片描述
圖片描述

圖形操做工具

https://robomongo.org/
https://blog.csdn.net/jian1ji...

遠程鏈接配置

https://www.cnblogs.com/jinxi...

mongodb的mongo.conf文件 啓動參數

啓動MongoDB有2種方式:

  • 一是直接指定配置參數,
  • 二是指定配置文件。

mongodb啓動腳本爲mongod,咱們能夠這樣啓動:

./mongod –port=27017 –host=127.0.0.1 –dbpath=db –logpath=27017.log –fork=true

也能夠在bin目錄建立以下mongo.conf文件

#bind_ip_all = true                 # 任何機器能夠鏈接
bing_ip = 127.0.0.1,192.168.0.3     # 本機和192.168.0.3能夠訪問
port = 27017                        # 實例運行在27017端口(默認)
dbpath = /usr/local/mongodb/db      # 數據文件夾存放地址(db要預先建立)
logpath = /usr/local/mongodb/logs/27017.log  # 日誌文件地址
logappend = false                   # 啓動時 添加仍是重寫日誌文件
fork = true                         # 是否後臺運行
auth = true                         # 開啓校驗用戶

啓動的時候在bin目錄執行:

./mongod -f mongo.conf 
# 或者
./mongod –config=mongo.conf

更多的配置信息點這裏: https://my.oschina.net/pwd/bl...
這種方式啓動方便的地方就是咱們能夠在依賴mongodb的項目中定義好mongodb.conf(YAML-based格式的配置文件) `

圖片描述

項目代碼在這裏,歡迎folk和star:https://github.com/AlexZ33/eg...

systemLog:
  verbosity: 0   #日誌文件輸出的級別,越大級別越低。
  quiet: true   #boolean 在quiet模式下會限制輸出信息:數據庫命令輸出,副本集活動,鏈接接受事件,鏈接關閉事件。
  syslogFacility: user #string,默認爲user 指定syslog日誌信息的設備級別。須要指定--syslog來使用這個選項。
  destination: file # string指定一個文件或syslog。若是指定爲文件,必須同時指定systemLog.path
  path: /dev/null  # string發送全部的診斷信息日誌,默認重啓後會覆蓋。
  quiet: true
  logAppend: false # boolean是否啓用追加日誌。
  timeStampFormat # string,默認爲iso8601-local 日誌信息中的時間戳格式

storage:
  dbPath: /data/db
  directoryPerDB: true
  journal:
    enabled: true
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      directoryForIndexes: true

processManagement:
  fork: true # boolean,默認爲false是守護進程在後臺運行。

net:
  bindIp: 127.0.0.1
  port: 27017
  maxIncomingConnections: 1000000

咱們能夠在npm scripts中加入:

"mongod": "sudo mongod --config config/mongodb.conf"

參考

安裝與遠程鏈接
慕課網 mongoDB入門篇
MongoDB 實戰
MongoDB 權威指南
mongod conf

相關文章
相關標籤/搜索