數據庫應用——MongoDB基礎

                                                          MongoDB基礎

一、MongoDB概述
1、非關係型數據庫
(1)存儲數據不以關係型模型爲依據,不需要固定的格式表。非關係型數據庫作爲關係型數據庫的一個補充,在日益發展的網站時代,發揮着高效與高性能。
(2)優點
    ①數據庫高併發讀寫
    ②對海量數據高效率存儲與訪問
    ③數據庫高擴展性與高可用性
(3)常用非關係型數據庫
    ①MongoDB
    ②Memcache
    ③Redis
    ④HBase

2、MongoDB簡介
(1)一款跨平臺、面向文檔的數據庫。可實現高性能、高可用性,並且能夠輕鬆擴展
(2)是一個介於關係型數據庫和非關係型數據庫之間的產品,是非關係型數據庫當中功能最豐富,最像關係型數據庫的
(3)不採用關係模型,主要是爲了獲得更好的擴展性,它不再有行的概念,運行方式主要基於兩個概念:集合(colletion)和文檔(document)

3、MongoDB的特點
(1)面向集合存儲、模式自由、豐富的查詢語句和多索引、複製集機制、易於水平擴展、可插入存儲引擎、跨平臺多語言支持
(2)安裝簡單,提供了面向文檔存儲功能,操作起來比較容易
(3)提供了複製、高可用性和自動分片功能。分片:如果負載增加,可以嗎分佈在計算機網絡中的其他節點上
(4)支持豐富的查詢表達式,查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組
(5)支持各種語言:Ruby、Python、Java、C++、PHP、C#等多種語言

4、適用領域
(1)可以爲web應用提供可擴展的高性能數據存儲解決方案。主要適用領域有網站數據、分佈式場景、數據緩存和JSON文檔格式存儲。
(2)適合大數據量、高併發、弱事務的互聯網應用,內置的水平擴展機制提供了從幾百萬到十億級別的數據處理能力,可以很好滿足web2.0和異動互聯網應用數據存儲的要求


二、MongoDB的安裝
1、安裝及運行控制
(1)安裝
    ①安裝支持軟件:yum install -y openssl-devel
    ②安裝MongoDB
    ③創建相關目錄
        1)存儲目錄
            a.mkdir -p /data/mongodb1
        2)日誌目錄
            a.mkdir -p /data/logs/mongodb
            b.touch /data/logs/mongodb/mongodb1.log
            c.chmod -R 777 /data/logs/mongodb/mongodb1.log
        3)進程佔用資源設置
            a.ulimit -n 25000
(2)運行控制
    ①創建配置文件和啓動參數
        1)vim /usr/local/mongodb/mongodb1.conf
            port = 27017
            dbpath = /data/mongodb1
            logpath = /data/logs/mongodb/mongodb1.log
            fork = true
            maxConns = 5000
            storageEngine = mmapv1
        2)
            ②設置內核參數
echo 0 > /proc/sys/vm/zone_reclaim_mode
sysctl -w vm.zone_reclaim_mode=0
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

2、啓動和停止MongoDB
(1)啓動
    ①usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb1.conf
    ②usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb1.conf
(2)停止
    ①usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb1.conf --shutdown
    ②非正常關閉需手動刪除mongod.lock文件:rm -rf /data/mongodb1/mongodb1.lock
(3)設置開機啓動
(4)連接並訪問MongoDB
    ①/usr/local/mongodb/bin/mongo


三、MongoDB的存儲結構
1、邏輯存儲結構
(1)常用術語及說明

(2)數據庫
    ①默認數據庫:text
    ②保留數據庫
        1)admin:root數據庫。如果將一個用戶添加到這個數據庫,則它將自動集成所有數據庫的權限。一些特定的服務器端命令也只能從這個數據庫運行
        2)local:這個數據永遠不被複制,可以用來存儲限於本地單臺服務器的任意集合
        3)config:當用於分片設置時,config數據庫在內部使用,用於保存分片的相關信息
(3)集合
    ①MongoDB的文檔組,類似於關係數據庫中的表格
    ②集合沒有固定的結構,可以插入不同格式和類型的數據,但通常情況下插入的數據都會有一定關聯性
    ③合法的集合名字不能使空字符串,不能含有\0(空字符),這個祖父表示集合名的結尾,不能以system.開頭,這是爲系統集合保留的前綴
(4)文檔
    ①文檔是一個鍵值,即BSON。
    ②文檔不需要設置相同的字段,並且相同字段不需要相同的數據類型
    ③文檔中的鍵值對是有序的
    ④文檔中的值可以使雙銀行裏面的字符串,也可以是其他幾種數據類型
    ⑤區分類型和大小寫
    ⑥文檔不能有重複鍵
    ⑦文檔的鍵是字符串,除了少數情況,鍵可以使用任意UTF-8字符
    ⑧鍵不能含有空字符,空字符用來標識結尾
    ⑨.和$有特別意義,只有在特定環境下才能使用
    ⑩以_開頭的鍵是保留的

2、物理存儲結構
(1)數據存儲
    ①數據目錄由dbpath指定
    ②每個數據庫都包含一個.ns文件和一些數據文件,隨着數據量不斷增大,文件數量也會增多。
    ③數據文件每次生成一個新文件,大小都會比上一個文件大兩倍
    ④文件使用MMAP進行內存映射,會將所有數據文件映射到內存中,但只是虛擬內存,只有訪問到這塊數據時纔會交換到物理內存
(2)日誌存儲
    ①存放位置由logpath指定
    ②journal日誌文件,用於MongoDB崩潰恢復的保障
    ③oplog複製操作日誌文件在啓動主從複製時出現
    ④man查詢日誌文件,需要在配置文件中指定profile=1與slowms=200,查看慢查詢的命令爲:>db.system.profile.find()

3、數據類型

四、MongoDB基本操作
1、常用基本操作


2、連接數據庫
(1)/usr/local/mongodb/bin/mongo
(2)mongodb://zhangsan:[email protected]:27017
3、創建和刪除數據庫
(1)創建:use database_name
(2)刪除(先進入相應庫):db.dropDatabase()

4、集合和文檔的操作
(1)直接創建集合:
    ①db.createCollection(“name”,{capped:true,autoIndexId:true,size:6142800,max:10000})
    ②capped:是否啓用集合限制,如果開啓需要制定一個限制條件,默認爲不啓用,這個參數沒有實際意義
    ③autoindexid:是否使用_id作爲索引,默認爲使用(true或false)
    ④size:限制集合使用空間的大小,默認爲沒有限制
    ⑤max:集合中最大條數限制,默認爲沒有限制
(2)向集合中插入文檔:db.collection_name.insert({“key”:”value”})
    ①不指定_id:db.collection_name.save(document)
(3)跟新文檔:db.collection_name.update({“_id”:1},{“key”:”value”})
    ①只更新一條記錄:db.collection_name.update({“_id”:1},{$set:(“key”:”value”)})
    ②也可用save命令進行跟新
(4)刪除文檔:db.collection_name.remove()
    ①deleteOne()
    ②deleteMany()


五、MongoDB日常維護
1、備份與恢復管理
(1)導入導出
    ①導出:mongoexport -d dbname -c collectionname -o filename.json
    ②導入:mongoimport -d bdname -c collectioname file
    ③d:數據庫名字
    ④c:collection名字
    ⑤f:導出哪些列
    ⑥o:要導出的文件
    ⑦q:導出數據的過濾條件
(2)備份與恢復
    ①備份:mongodump -h dbhost -d dbname -o dbdirectory
    ②h:數據庫服務器地址
    ③d:需要備份的實例
    ④o:備份的數據存放位置,備份後會自動在此目錄建立相應文件夾及備份文件
    ⑤恢復:mongorestore -h dbhost -d dbname --dir dbdirectory
(3)複製數據庫
    ①db.copyDatabase(“db1”,”db2”,”127.0.0.1:27017”)
(4)克隆集合
    ①db.runCommand({“cloneCollection”:”test.user”,”from”:”127.0.0.1:27018”})
(5)不同數據庫之間數據遷移(擴展知識)

2、安全管理
(1)限定監聽特定IP和端口(配置文件)
    ①bind_ip=192.168.11.30
    ②port=27017
(2)授權啓動
    ①配置文件添加auth=true
    ②添加用戶
        1)use admin
        2)db.createUser({“user”:”root”,”pwd”:”111111”,”roles”:[“root”]})
            a.“rules”:[{role:”userAdminAnyDatabase”,db:”admin”}]
    ③使用用戶
        1)use admin
        2)db.auth(“root”,”111111”)
    ④查看用戶
        1)db.system.users.find()
        2)show users
    ⑤刪除用戶
        1)db.system.users.remove({user:”root”})
    ⑥數據庫內置角色
        1)數據庫用戶角色:
            a.read:指定數據庫讀取權限
            b.readWrite:指定數據庫讀寫權限
        2)數據庫管理角色:
            a.dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
            b.dbOwner:允許在當前DB中執行任意操作
            c.userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫裏創建、刪除和管理用戶
        3)集羣管理角色:
            a.clusterAdmin:賦予管理集羣的最高權限,只在admin數據庫中可用
            b.clusterManager:賦予管理和監控集羣的權限
            c.clusterMonitor:賦予監控集羣的權限,對監控工具具有readonly的權限
            d.hostManager:賦予管理Server
        4)備份恢復角色:
            a.backup:備份權限
            b.restore:恢復備份權限
        5)所有數據庫角色:
            a.readAnyDatabase:賦予用戶所有數據庫的讀權限,只在admin數據庫中可用
            b.readWriteAnyDatabase:賦予用戶所有數據庫的讀寫權限,只在admin數據庫中可用
            c.userAdminAnyDatabase:賦予用戶所有數據庫管理User的權限,只在admin數據庫中可用
            d.dbAdminAnyDatabase:賦予管理所有數據庫的權限,只在admin數據庫中可用
        6)超級用戶角色:
            a.root:超級賬號,超級權限,只在admin數據庫中可用
            b.這裏還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
        7)內部角色:
            a.__system
(3)進程管理
    ①查看進程:db.currentOp()

3、MongoDB監控
(1)查看數據庫統計信息
    ①查看數據庫實例狀態信息:db.serverStatus()
    ②查看當前數據庫統計信息:db.stats()
    ③通過web界面查看:在配置文件中添加httpinterface=true
(2)查看集合統計信息
    ①查看集合統計信息:db.users.stats()
    ②查看集合大小:db.user.dataSize()
(3)第三方監控工具
    ①可以再Nagios中配置使用MongoDB插件來監控MongoDB數據庫

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