mongodb快速入門

testingbang發表於2019-08-02

mongod b介紹


MongoDB是一個高效能,開源,無模式的文件型資料庫,是當前NoSql資料庫中比較熱門的一種。它在許多場景下可用於替代傳統的關係型資料庫或鍵/值儲存方式。Mongo使用C++開發。Mongo的官方網站地址是://www.mongodb.org/

NoSql,全稱是 Not Only Sql,指的是非關係型的資料庫。下一代資料庫主要解決幾個要點:非關係型的、分散式的、開源的、水平可擴充套件的。原始的目的是為了大規模web應用,這場運動開始於2009年初,通常特性應用如:模式自由、支援簡易複製、簡單的API、最終的一致性(非ACID)、大容量資料等。NoSQL被我們用得最多的當數key-value儲存,當然還有其他的文件型的、列儲存、圖型資料庫、xml資料庫等。


特點


高效能、易部署、易使用,儲存資料非常方便。主要功能特性有:

面向集合儲存,易儲存物件型別的資料。

模式自由。

支援動態查詢。

支援完全索引,包含內部物件。

支援查詢。

支援複製和故障恢復。

使用高效的二進位制資料儲存,包括大型物件(如視訊等)。

自動處理碎片,以支援雲端計算層次的擴充套件性

支援Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++語言的驅動程式,社群中也提供了對Erlang及.NET等平臺的驅動程式。

檔案儲存格式為BSON(一種JSON的擴充套件)。

可通過網路訪問。


功能


面向集合的儲存:適合儲存物件及JSON形式的資料。

動態查詢:Mongo支援豐富的查詢表示式。查詢指令使用JSON形式的標記,可輕易查詢文件中內嵌的物件及陣列。

完整的索引支援:包括文件內嵌物件及陣列。Mongo的查詢優化器會分析查詢表示式,並生成一個高效的查詢計劃。

查詢監視:Mongo包含一個監視工具用於分析資料庫操作的效能。

複製及自動故障轉移:Mongo資料庫支援伺服器之間的資料複製,支援主-從模式及伺服器之間的相互複製。複製的主要目標是提供冗餘及自動故障轉移。

高效的傳統儲存方式:支援二進位制資料及大型物件(如照片或圖片)

自動分片以支援雲級別的伸縮性:自動分片功能支援水平的資料庫叢集,可動態新增額外的機器。


適用場景


網站資料:Mongo非常適合實時的插入,更新與查詢,並具備網站實時資料儲存所需的複製及高度伸縮性。

快取:由於效能很高,Mongo也適合作為資訊基礎設施的快取層。

大尺寸,低價值的資料:使用傳統的關係型資料庫儲存一些資料時可能會比較昂貴,在此之前,很多時候程式設計師往往會選擇傳統的檔案進行儲存。

高伸縮性的場景:Mongo非常適合由數十或數百臺伺服器組成的資料庫。Mongo的路線圖中已經包含對MapReduce引擎的內建支援。

用於物件及JSON資料的儲存:Mongo的BSON資料格式非常適合文件化格式的儲存及查詢。


MongoDB的使用限制


高度事務性的系統:例如銀行或會計系統。傳統的關係型資料庫目前還是更適用於需要大量原子性複雜事務的應用程式。

傳統的商業智慧應用:針對特定問題的BI資料庫會對產生高度優化的查詢方式。對於此類應用,資料倉儲可能是更合適的選擇。


安裝與執行


官網下載對應的版本,一定要分清楚是32位還是64位

此處以32位的tar.gz包為例子

tar

mv改名,改名為mongodb

mv移動到/opt目錄下,並修改許可權為777

mkdir -p /data/db,並修改許可權為777

vi ~/.bashrc

加入:export PATH=/opt/mongodb/bin:$PATH

重啟機器

輸入命令mongod即可啟動,可以看到埠,瀏覽器訪問IP+埠即可(不要關閉該視窗)

如果無法啟動就刪除掉/data/db下的mongod.lock

MongoDB快速實戰

mongoVUE基本操作


MongoVUE是一個MongoDB在windwos下的客戶端管理工具,一般都會使用它來操作。

name隨便寫,server寫你伺服器的ip,port埠號,mongodb的預設埠是27017,然後連線就OK


體系結構


MongoDB 的文件(document) ,相當於關聯式資料庫中的一行記錄。

多個文件組成一個集合(collection) ,相當於關聯式資料庫的表。

多個集合(collection) ,邏輯上組織在一起,就是資料庫(database) 。

一個 MongoDB 例項支援多個資料庫(database) 。

MongoDB快速實戰

單條件查詢


MongoDB快速實戰

in查詢


MongoDB快速實戰

多條件查詢and


MongoDB快速實戰

多條件查詢or


MongoDB快速實戰

顯示查詢欄位


MongoDB快速實戰

排序(1 升序;-1 降序)


MongoDB快速實戰

插入記錄


MongoDB快速實戰

修改記錄


MongoDB快速實戰

刪除記錄


輸入條件,執行即可刪除


mongodb監控——mongostat


MongoDB快速實戰

getmore:通常發生在結果集比較大的查詢時, 第一個query返回了部分結果,後續的結果是通過getmore來獲取的

flushs:每秒執行同步將資料寫入硬碟的次數。

mapped 對映到記憶體的資料大小,單位是MB,

vsize:虛擬記憶體使用量,單位MB

res:實體記憶體使用量,單位MB

faults:每秒訪問失敗數(只有Linux有),資料被交換出實體記憶體,放到swap。不要超過100,否則就是機器記憶體太小,造成頻繁swap寫入。此時要升級記憶體或者擴充套件

locked db:被鎖的時間百分比,儘量控制在10%以下

idx miss %:索引不命中所佔百分比。如果太高的話就要考慮索引是不是設計不合理

qr|qw ar|aw: mongo負載高時,命令來不及處理,mongo將命令放入佇列。 qr|qw 等待讀/寫的佇列長度 ar|aw 執行讀/寫操作客戶端數量。

conn:有多少連線


mongodb profiler


類似於mysql中的慢查詢

MongoDB快速實戰

開啟profile


db.setProfilingLevel(n);

n:

0 - 關閉效能分析,測試環境可以開啟,生成環境關閉,對效能有很大影響

1 - 開啟慢查詢日誌,執行時間大於100毫秒的語句

2 - 開啟所有操作日誌

db.setProfilingLevel(level , slowms);

MongoDB快速實戰

Mongo Profile 記錄是直接存在系統db裡的,記錄位置local》collections》system.profile


重點指標以及常見優化


millis: 該命令執行耗時,以毫秒記

responseLength:查詢返回的長度

nscanned:在執行查詢操作的時候掃描了多少物件

nreturned:從查詢中返回的結果物件

MongoDB快速實戰

如果 nscanned(掃描的記錄數)遠大於 nreturned(返回結果的記錄數)的話,那麼我們就要考慮通過加索引來優化記錄定位了。

db.表名.ensureIndex({age:1}) //1(升序);-1(降序)

對於建立索引的建議是:如果很少讀,那麼儘量不要新增索引,因為索引越多,寫操作會越慢。如果讀量很大,那麼建立索引還是比較划算的。

當返回的結果集很大時即responseLength值相當大時,會使得效能下降,在做find查詢時,需要新增第二個查詢引數,只獲取需要顯示的欄位.

造成慢查詢可能是索引的問題,也可能是資料不在記憶體造成(磁碟讀入)。


最大連線數


db.serverStatus().connections;

current數值+available數值就是當前mongodb最大連線數

啟動裡面加引數 --maxConns=3000

不要忘了linux中的開啟最大檔案連線數會影響此處的設定,一定要把他也調大


mongo主從複製


架構上和mysql的主從複製類似,原理如下:

mongodb的複製至少需要兩個伺服器或者節點。其中一個是主,負責處理客戶端請求,其餘為從,負責對映主節點的資料。主節點記錄在其上執行的所有操作。從節點定期輪詢主節點獲得操作,然後對自己的資料副本執行這些操作。

開啟oplog


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69942496/viewspace-2652537/,如需轉載,請註明出處,否則將追究法律責任。