mongodb快速入門

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查詢時,需要添加第二個查詢參數,只獲取需要顯示的字段.

造成慢查詢可能是索引的問題,也可能是數據不在內存造成(磁盤讀入)。鄭州婦科醫院:http://jbk.39.net/yiyuanzaixian/sysdfkyy/


最大連接數


db.serverStatus().connections;

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

啓動裏面加參數 --maxConns=3000

不要忘了linux中的打開最大文件連接數會影響此處的設置,一定要把他也調大


mongo主從複製


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

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

打開oplog


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章