Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB
MongoDB 簡介
1. 易于使用:沒有固定的模式,根據需要添加和刪除字段更加容易
2. 易于擴展:MongoDB的設計采用橫向擴展。面向文檔的數據模型使它能很容易的再多臺服務器之間進行分割。自動處理跨越集群的數據和負載,自動重新分配文檔。
? ? ? ? ? ? ? ? ? ?以及將用戶請求路由到正確的機器上。
3. 豐富的功能:索引,聚合,特殊的集合類型(過期,固定大小的集合),文件存儲。
4. 卓越的性能
?
MongoDB基礎知識
1. 文檔:文檔就是鍵值對的一個有序集。
? ? 1). MongoDB不但區分類型,而且區分大小寫。
? ? 2). 文檔中的鍵值對是有序的:{"x":1,"y":2}與{"y":2,"x":1}是不同的。
2. 集合:集合就是一組文檔
? ? 1). 集合是動態模式的。這意味著一個集合里面的文檔可以是各式各樣的。
? ? 2). 集合命名:不能包含"system.",不能有保留字符'$'
? ? 3). 子集合:組織集合的一種管理是使用"."分割不同命名空間的子集合。很多MongoDB工具類都使用了子集合。在MongoDB中使用子集合來組織數據非常高效,值得推薦。
3. 數據庫:在MongoDB中,多個文檔組成集合,而多個集合可以組成數據庫。
? ? 1). 數據庫名區分大小寫,即便是在不區分大小寫的文件系統中也是如此。簡單起見,數據庫名應該全部小寫。
? ? 2). 數據庫最終會變成文件系統里的文件,而數據庫名就是相對應的文件名。
? ? 3). 保留數據庫:
? ? ? ? ?admin: 如果將一個用戶添加到admin數據庫,這個用戶將自動獲取所有數據庫權限。再者,一些特定的服務器命令也只能從admin數據庫運行,如列出所有數據庫或關閉服務器。
? ? ? ? ?local: 這個數據庫永遠不可以復制,且一臺服務器上的所有本地集合都可以存儲在這個數據庫中。
? ? ? ? ?config:MongoDB用于分片設置時,分片信息會存儲在config數據庫中。
? ? 4). 把數據庫名添加到集合名前,得到集合的完全限定名,即命名空間。命名空間的長度不得超過121字節,且在實際使用中應小于100字節。
4. shell中的基本操作?
? ? 1). insert
? ? 2). find和findOne
? ? 3). update , 至少兩個參數,第一個是限定條件(用于匹配待更新的文檔),第二個是新的文檔
? ? 4). remove , 永久刪除,如果沒有任何參數,它會刪除所有文檔
5. 數據類型
? ? 1). 基本類型:null({"x":null}) , 布爾型 , 數值 ,字符串,日期({"x":new Date()} 日期被存儲為自新紀元已經過的毫秒,不存儲時區),正則表達式,數組,內嵌文檔,對象id,
? ? ? ? ? ? ? ? ? ? ? 二進制數據,代碼
? ? 2). ObjectId是"_id"的默認類型。ObjectId的12字節按照如下方式生成:時間戳 ?機器 ?PID 計數器
? ? 3). 如果插入文檔時沒有"_id"鍵,系統會自動幫你創建一個。可以由MongoDB服務器來做這件事,但通常會在客戶端由驅動程序完成。
6. 使用MongoDB shell?
? ? 1). 在啟動shell時指定機器名和端口,就可以連接到一臺不同的機器: mongo some-host:30000/myDB ? ? ? ? ? // ? ?IP:port/dbname
? ? 2). 啟動mongo shell 時不連接到任何mongod有時很方便。通過--nodb參數啟動shell,啟動時就不會連接任何數據庫:mongo --nodb?
? ? ? ? ??啟動之后,在需要時運行new Mongo(hostname)命令就可以連接到想要的mongod了: conn = new Mongo("some-host:30000") , 然后執行 db=conn.getDB("myDB")
? ? 3). 對應MongoDB 特有的功能,shell內置了幫助文檔,可以使用help命令查看:help
? ? 4). 可以通過db.help()查看數據庫級別的幫助,使用db.foo.help()查看集合級別的幫助
? ? 5). 直接在shell中輸入函數名(函數名后不要輸入小括號),這樣就可以看到相應的JS實現代碼。
7. 使用shell執行腳本
? ? 1). 直接在命令中傳遞腳本:mongo ?s1.js ? s2.js?
? ? 2). 如需在指定的主機或端口上執行腳本,需指定地址和腳本名稱:mongo --quiet server-1:30000/foo s1.js ? s2.js
? ? 3). 使用load函數:load("s1.js")
? ? 4). 可以使用腳本將變量注入到shell
8. 創建.mongorc.js 文件
? ? 1). 如果某些腳本會被頻繁的加載,可以將它們添加到mongorc.js 文件中。這個文件會在?啟動shell時?自動運行。 ??
? ? 2). .mongorc.js最常見的用途之一是移除那些比較"危險的函數"。可以在這里集中重寫這些方法。這種方式并不能保護數據庫,只能預防自己手誤。
9. 定制shell提示
? ? 通常來說,提示函數中應該包含對getLastError的調用。這樣可以捕獲數據庫錯誤,而且可以在shell斷開時自動重連。
10. 編輯復合變量
? ? ? 1). shell不可以編輯之前的行。對于大塊的代碼或者對象,你可能更愿意在編輯器中編輯。為了方便地調用編輯器,可以在shell中設置EDITOR變量(也可以在環境變量后總設置)。
? ? ? ? ? ? EDITOR="/usr/bin/emacs"
? ? ? ? ? ? 現在編輯一個變量,可以使用"edit 變量名"這個命令。修改完后,保存并退出編輯器。變量就會被重新解析然后加載會shell。
? ? ? 2). 在.mongorc.js文件中添加一行內容,EDITOR="編輯器路徑";,以后就不用單獨設置EDITOR變量了。
11. 集合命名注意事項:
? ? ? 1). 可以使用db.collectionName獲取一個集合內容,但是如果集合名稱中包含保留字或者無效的JS屬性名,db.collectionName就不能正常工作了。
? ? ? 2). 訪問一些包含保留字或者無效的JS屬性名的集合可以使用:db.getCollection("collectionName")
? ? ? 3). 數組訪問法
?
啟動和停止MongoDB
1. 啟動MongoDB
? ? 1). 執行mongod程序可啟動MongoDB服務器,mongod在啟動時可使用很多可配置的選項,在命令行中運行mongod --help可列出這些選項。
? ? 2). mongod 常用配置選項:
? ? ? ? ?--dbpath : 使用此選項可以指定一個目錄為數據目錄。需要啟動前建立好目錄。mongod啟動時,會在其數據目錄中創建一個mongod.lock文件,以阻止其他mongod進程使用該目錄。
? ? ? ? ?--port : 指定服務器監聽端口。默認27017。
? ? ? ? ?--fork : 啟動此選項以調用fork創建子線程,在后臺運行MongoDB。啟用--fork選項時,必須同時啟用--logpath選項。
? ? ? ? ?--logpath:使用此選項,所有輸出信息會被發送到指定文件,而非在命令行上輸出。文件不存在就新建,如果存在覆蓋。如需保留舊日志,需啟動時再增加選項--logappend選項。
? ? ? ? ?--directoryperdb:啟動該選項可將每個數據庫存放在單獨的目錄中。
? ? ? ? ?--config:額外加載配置文件。該選項通常用于確保每次重新啟動時的選項都是一致的。
? ? ? ? ? 舉例:./mongd ?--port 5586 --fork --logpath mongodb.log --logappend?
? ? ?3). 首次安裝啟動MongoDB時,應查看一下日志,看看都會有哪些警告。
? ? ?4). 使用配置文件,啟動命令:./mongod --config ?mongodb.conf
? ? ? ? ? 配置文件內容舉例:
# 這里可以寫注釋 port=5586 fork=true # 后臺啟動 logpath=/var/log/mognodb.log logappend=true2. 停止MongoDB
? ? 1). 使用shutdown命令--{"shutdown":1}
? ? 2). shell提供了一個輔助函數,用以簡單執行shutdown命令:db.shutdownServer()
? ? 3). 可使用force選項,強制關閉主節點:db.adminCommand({"shutdown":1,"force":true})
? ? 4). kill -2 pid 或者 kill pid?
? ? 5). 在主節點上運行shutdown命令時,服務器在關閉前,會等待備份節點追趕主節點以保持同步。這將回滾的可能性降至最低,但shutdown操作有失敗的可能。如果幾秒內沒有
? ? ? ? ?備份節點成功同步,則shutdown操作失敗,主節點亦不會停止運行。可以使用force選項,強制關閉主節點。這相當于發送一個SIGINT或者SIGTERM信號(幾種做法都能使
? ? ? ? ?MongoDB安全地停止運行,但可能會有數據未能完成同步)。如服務器正在終端作為前臺進程運行,那么按下Ctrl+C快捷鍵也能發送一個SIGINT信號。另外,kill之類的命令,
? ? ? ? ?也可以用于發送這些信號。假設mongod的PID為10014,那么相應的命令就是kill -2 10014(發送SIGINT信號)或kill10014(發送SIGTERM信號)
? ? 6). mongod收到SIGINT或者SIGTERM信號后,會安全地停止運行。這意味著mongod會等當前正在進行的操作或者文件預分配結束(耗時一定時間),再關閉所有打開的連接,將
? ? ? ? ?緩存寫入硬盤,繼而結束運行。但不會等待備份節點追趕上主節點。
3. 安全性
? ? 1). 最好的方式是設置防火墻,只允許內部網絡地址對MongoDB的訪問。
? ? 2). --bind_ip : 指定MongoDB監聽的接口。我們通常將其設置為一個內部IP地址,從而保證應用服務器和集群中的其他成員訪問,同時拒絕外網訪問。
? ? 3). --nohttpinterface : 關閉默認啟動的微型HTTP服務器
? ? 4). --nounixsocket : 禁用UNIX socket 來進行連接。
? ? 5). --noscripting : 禁用服務器端JavaScript腳本的運行。可能會引起一些輔助函數失效。
? ? 6). 數據加密和SSL安全連接
4. 日志
? ? 1). MongoDB會輸出大量日志消息,但請不要使用--quiet選項(該選項會隱藏部分日志消息)。保持日志級別為默認值通常不錯,此時日志中有足夠的信息進行基本調試(如耗時
? ? ? ? ?過長或啟動異常的原因等)。調試應用某特定異常問題時,可以使用一些選項從日志中獲取更多信息。
? ? 2). 在重啟MongoDB時,可通過在參數中附加數據更多的"v"(即:-v,-vv,-vvv,-vvvv,-vvvvv) 或者運行setParameter命令,完成日志級別(log level)的更改。
? ? ? ? ?db.adminCommand({"setParameter":1,"logLevel":3})
? ? ? ? ?記得將日志級別重設為0,否則日志中會存在過多不必要內容。日志級別調高到5時,mongod會在日志中記錄幾乎所有操作,包括每一個請求所處理的內容。如果記錄所有
? ? ? ? ?內容,會產生大量的磁盤讀寫操作(IO),可能會拖慢系統運行。
? ? 3). 如需即時看到正在運行的所有操作,打開分析器不失為一個更好的方法。
? ? 4). MongoDB默認記錄耗時100毫秒的查詢,可以通過setProfilingLevel命令來更改次閾值。
? ? 5). 設置一個計劃任務以便每天或者每周分割日志文件。如果使用--logpath選項啟動MongoDB,以進程發送一個SIGUSR1信號即時其對日志進行分割。也可以使用logRotate
? ? ? ? ?命令達到相同目的:db.adminCommond({"logRotate":1})
? ?
轉載于:https://www.cnblogs.com/Jtianlin/p/5084306.html
總結
以上是生活随笔為你收集整理的Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++实现链栈的基本操作
- 下一篇: 两种类型的Spark RDD task解