目錄
一、背景描述及其方案設(shè)計
(一)業(yè)務(wù)背景描述
(二)模擬運維設(shè)計方案
二、Mongodb介紹
(一)nosql介紹
(二)產(chǎn)品特點
1、存儲性
2、 效率性
3、結(jié)構(gòu)
?三、安裝和配置
(一)安裝方式介紹
(二)二進制可執(zhí)行安裝
1、上傳安裝包到服務(wù)器目錄
2、 解壓到安裝目錄 并移動
?3、創(chuàng)建數(shù)據(jù)存儲目錄和日志目錄
4、啟動mongod服務(wù)
?(三)命令行客戶端操作
?四、數(shù)據(jù)結(jié)構(gòu)類型操作 CURD
(一)添加數(shù)據(jù)
1、mongodb里存儲數(shù)據(jù)的格式文檔形式,以bson格式的文檔形式。
2、 語法:db.集合名稱.insert(bson格式數(shù)據(jù))
3、普通數(shù)據(jù)添加
4、多維數(shù)據(jù)對象添加
?5、數(shù)組信息添加
?(二)查詢數(shù)據(jù)
1、語法:
2、籠統(tǒng)方式查詢
?3、條件限制查詢
?4、范圍條件查詢
5、多個條件查詢
6、多維字段查詢
7、數(shù)組條件查詢
(1)查詢滿足其中之一即可顯示
?(2)滿足查詢條件所有的才可顯示
8、限制查詢字段
?9、$or查詢
10、count 語法
?11、limit語法 skip語法
?(三)修改數(shù)據(jù)
?1、語法:
2、有$set的修改
3、 沒有$set的修改
?(四)刪除數(shù)據(jù)
1、刪除記錄
2、刪除字段
?五、安全設(shè)置
(一)限制登錄
1、使用另外一臺虛擬機,使用mongo命令行端進行測試
?編輯 2、關(guān)閉mongodb
3、 添加啟動的腳本,啟動mongod
?4、使用遠程登錄mongod服務(wù)
(二) 用戶權(quán)限管理
1、需求
2、語法:
3、實現(xiàn)步驟:
①切換admin庫,進行用戶創(chuàng)建
②關(guān)閉mongod服務(wù),重啟添加權(quán)限參數(shù)并啟動
?編輯?③測試使用
?編輯?六、業(yè)務(wù)實例
?(一)PHP擴展安裝
1、上傳php擴展包
2、解壓編譯安裝
3、添加php.ini匹配
4、重啟php-fpm查看phpinfo
?(二)桌面管理使用
?1、軟件是綠色版本,直接解壓,點擊使用即可
2、填寫相關(guān)參數(shù)
??編輯
?3、測試是否可以正常連接
4、點擊連接
?5、查看數(shù)據(jù)
?(三)日志統(tǒng)計展示
1、很多網(wǎng)站需要統(tǒng)計某個頁面或者某個功能訪問量,如果訪問量比較大,需要記錄的組件具有很快的讀寫效率??梢允褂霉δ苄愿嗟膍ongodb來完成此業(yè)務(wù)。mongodb具有更多的數(shù)據(jù)靈活性。
2、網(wǎng)站訪問日志記錄的信息:
3、使用服務(wù)器
4、Tip:nginx負載均衡服務(wù)器解決后端服務(wù)獲取不到真實用戶IP的方式
①在負載均衡nginx服務(wù)器,填寫真實用戶IP的轉(zhuǎn)發(fā)
②web服務(wù)器的nginx需要配置接收真實的用戶IP,需要使用到模塊--with-http_realip_module,在編譯安裝nginx時需要加入
③配置語法
?編輯 ④操作實現(xiàn)步驟:
?(1)刪除原來的文件
(2)上傳修改好的文件
(3)訪問頁面之后,可以查看到訪問已經(jīng)被記錄
一、背景描述及其方案設(shè)計
(一)業(yè)務(wù)背景描述
?戶數(shù)量: 10000-12000(?戶量猛增)
PV : 1000000-5000000(24小時訪問次數(shù)總和)
QPS: 50-100*(每秒訪問次數(shù))? 300
DAU: 2000~*000(每日活躍用戶數(shù))
根據(jù)業(yè)務(wù)需求:
用戶訪問日志是在web服務(wù)器access.log存儲
統(tǒng)計每日訪問量,峰值訪問量
把每次訪問存儲到mongodb中,mongodb用來篩選日志
(二)模擬運維設(shè)計方案
根據(jù)以上業(yè)務(wù)需求,采用mongodb數(shù)據(jù)庫存儲用戶的訪問日志,使用單臺服務(wù)器
①訪問日志存儲
②在mongo中篩選查看信息
二、Mongodb介紹
(一)nosql介紹
數(shù)據(jù)庫排名:https://db-engines.com/en/ranking
關(guān)系數(shù)據(jù)庫 RDBMS?? 設(shè)計表結(jié)構(gòu),通過SQL語句進行操作。連表關(guān)系
常見的關(guān)系型數(shù)據(jù)庫:mysql oracle(商業(yè)) DB2(IBM) sqlserver(微軟) access(微軟) sqlite3(小型 嵌入到APP中) postgresql(加州伯克利大學(xué))
nosql 泛指非關(guān)系數(shù)據(jù)庫 存儲格式key=>value ??
memcached ??redis 內(nèi)存緩存數(shù)據(jù)庫??
mongodb ?具有更多的功能,可以適用于大部分的mysql場景 document store ?文檔型數(shù)據(jù)庫
(二)產(chǎn)品特點
1、存儲性
比較適合存儲大量的沒有規(guī)則、無序的數(shù)據(jù)。
存儲量大:單表實現(xiàn)存儲PB級別的數(shù)據(jù)
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB (Exabyte 百億億字節(jié) 艾字節(jié))=1024PB,
1ZB (Zettabyte 十萬億億字節(jié) 澤字節(jié))= 1024EB,
1YB (Yottabyte 一億億億字節(jié) 堯字節(jié))= 1024ZB,
2、 效率性
數(shù)據(jù)的效率,就是指存儲和讀寫速度。
?
3、結(jié)構(gòu)
?三、安裝和配置
(一)安裝方式介紹
yum方式安裝:Install MongoDB Community Edition on Red Hat or CentOS — MongoDB Manual
手動通用安裝:Install MongoDB Community Edition on Linux — MongoDB Manual
(二)二進制可執(zhí)行安裝
1、上傳安裝包到服務(wù)器目錄
2、 解壓到安裝目錄 并移動
shell > tar xvf mongodb-linux-x86_64-rhel62-3.6.5.tgz
shell > mv mongodb-linux-x86_64-rhel62-3.6.5 /usr/local/mongodb
?3、創(chuàng)建數(shù)據(jù)存儲目錄和日志目錄
shell > cd /usr/local/mongodb
shell > mkdir data
shell > mkdir logs
4、啟動mongod服務(wù)
shell > cd /usr/local/mongodb/bin
shell > ./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/log.txt --fork
參數(shù)介紹:
dbpath?數(shù)據(jù)存儲路徑
logpath?日志存儲路徑
fork??后臺啟動
auth??權(quán)限開啟
bind_ip ?指定綁定網(wǎng)卡ip
?(三)命令行客戶端操作
?四、數(shù)據(jù)結(jié)構(gòu)類型操作 CURD
(一)添加數(shù)據(jù)
1、mongodb里存儲數(shù)據(jù)的格式文檔形式,以bson格式的文檔形式。
在mongodb中,可有無需創(chuàng)建數(shù)據(jù)庫和集合,使用的時候會自動創(chuàng)建?
創(chuàng)建一個庫devops
2、 語法:db.集合名稱.insert(bson格式數(shù)據(jù))
3、普通數(shù)據(jù)添加
db.goods.insert({name:'huawei01',price:1000,weight:135,number:35})
4、多維數(shù)據(jù)對象添加
db.goods.insert({name:'xiaomi5',price:1999,weight:156,number:45,area:{province:'beijing',city:'beijing'}})
?5、數(shù)組信息添加
db.goods.insert({name:'xiaomimax',price:2000,weight:180,number:100,area:{province:'henan',city:'zhengzhou'},color:['black','white','red']})
?(二)查詢數(shù)據(jù)
1、語法:
db.集合名稱.find(查詢條件)
db.集合名稱.findOne(查詢條件)
2、籠統(tǒng)方式查詢
不進行條件限制,全部取出來。
findOne會取出符合結(jié)果的第一條信息,并且以格式化形式返回
?3、條件限制查詢
條件格式,所見及所得
db.goods.find({name:'xiaomimax'})
db.goods.findOne({name:'xiaomimax'})
?4、范圍條件查詢
mysql?? <???? <=?? >?? >=??? !=
mongo? $lt??? $lte? $gt? $gte? $ne
db.goods.find({price:{'$lte':1999}})
db.goods.find({price:{'$lt':1999}})
5、多個條件查詢
類似mysql中的AND語法
db.goods.find({price:{'$lte':1999},number:{'$gte':40}})
6、多維字段查詢
通過多維字段的值進行查詢
db.goods.find({'area.city':'zhengzhou'});
注意:多維字段需要用引號包含起來
7、數(shù)組條件查詢
(1)查詢滿足其中之一即可顯示
db.goods.find({color:'black'})
?(2)滿足查詢條件所有的才可顯示
db.集合名稱.find({字段(數(shù)組):{‘$all’:[v1,v2]}})
db.goods.insert({name:'iphonex',price:8398,weight:100,number:200,area:{province:'jiangsu',city:'nanjing'},color:['gray','black','white','gold']})
db.goods.find({color:{'$all':['black','gold']}})
8、限制查詢字段
在實際使用環(huán)境,不需要查詢并顯示太多的字段??梢赃x擇設(shè)定顯示。
語法:db.集合名稱.find({查詢條件},{篩選條件})
顯示為1,不顯示為0?? 要是1都是1,要是0都是0? _id除外
db.goods.find({color:{'$all':['black','gold']}},{name:1,_id:0})
?注意采用合適的方式,顯示出查詢字段值內(nèi)容
_id是mongodb數(shù)據(jù)庫里的集合中,默認的主鍵id,具有索引內(nèi)容,通過主鍵查詢,會很快的查詢速度。不要隨意修改此值,使用默認即可。
?9、$or查詢
滿足其中之一的條件就可以顯示,類似mysql的中的or條件語法
select * from goods where price > 5000 or number >= 100
db.goods.find({'$or':[{price:{'$gt':5000}},{number:{'$gte':100}}]})
10、count 語法
返回結(jié)果的數(shù)量統(tǒng)計
鏈式操作
db.goods.count()
db.goods.find({price:{'$gt':5000}}).count()
db.goods.count({price:{'$gt':5000}})
?
?11、limit語法 skip語法
類似于mysql中的limit(skip,length)語法
limit()? 取幾個
skip()?? 跳過幾個
db.goods.find().limit(1);
db.goods.find().skip(1).limit(1);
mongodb語法和SQL語句的對比
?
?(三)修改數(shù)據(jù)
?1、語法:
db.集合名稱.update({查詢條件},{修改條件})
db.集合名稱.updateOne()? 修改匹配的第一條
db.集合名稱.updateMany()? 修改匹配所有條
2、有$set的修改
db.goods.update({name:'iphonex'},{'$set':{price:8500}})
???
db.沒有$set的修改goods.updateOne({name:'xiaomi5'},{'$set':{price:1500}})
3、 沒有$set的修改
沒有$set關(guān)鍵字語法,把設(shè)置的字段進行修改,沒有設(shè)置的就會被刪除掉
db.goods.update({name:'iphonex'},{price:8550})
?(四)刪除數(shù)據(jù)
1、刪除記錄
db.集合名稱.remove({查詢條件})
db.集合名稱.deleteOne()? 刪除匹配的第一條
db.集合名稱.deleteMany()? 刪除匹配的多條
db.goods.remove({price:8550})
db.goods.deleteMany({price:{'$lte':2000}})
?
2、刪除字段
可以刪除某個字段的操作,使用的是update語法的$unset
db.goods.update({name:'huawei01'},{'$unset':{weight:0}})
值給一個就可以刪除了
真實業(yè)務(wù)當(dāng)中,一般不做物理刪除,會使用一個標識,來確認是否已經(jīng)被刪除的數(shù)據(jù)
?五、安全設(shè)置
https://docs.mongodb.com/manual/tutorial/create-users/?? ????
mongodb安全事件:https://www.jianshu.com/p/48d17a69e190
(一)限制登錄
1、使用另外一臺虛擬機,使用mongo命令行端進行測試
遠程登錄方法
2、關(guān)閉mongodb
正常情況下不要kill -9 mongod,使用mongo命令客戶端里的關(guān)機命令
3、 添加啟動的腳本,啟動mongod
shell > vim /etc/init.d/mongodb
?
bind綁定是外網(wǎng)通訊的網(wǎng)卡?? --bind_ip_all表示綁定0.0.0.0這個任意地址
?4、使用遠程登錄mongod服務(wù)
(二) 用戶權(quán)限管理
1、需求
設(shè)置一個超級管理員賬戶,對于所有庫具有讀寫權(quán)限
2、語法:
db.createUser({user:"root",pwd:"root",roles:["root"]})
3、實現(xiàn)步驟:
①切換admin庫,進行用戶創(chuàng)建
②關(guān)閉mongod服務(wù),重啟添加權(quán)限參數(shù)并啟動
關(guān)閉
在啟動腳本中加入--auth參數(shù)
?③測試使用
?添加用戶,限制用的庫的權(quán)限,只讀
?六、業(yè)務(wù)實例
?(一)PHP擴展安裝
1、上傳php擴展包
如果沒有phpize這個命令,需要yum安裝php-devel
2、解壓編譯安裝
shell > yum -y install php-devel? #安裝phpize
shell > tar xvf mongodb-1.5.3.tgz
shell > cd mongodb-1.5.3
shell > phpize
shell > ./configure && make && make install
3、添加php.ini匹配
shell > vim /usr/local/php/etc/php.ini
4、重啟php-fpm查看phpinfo
shell > service php-fpm restart
?(二)桌面管理使用
?1、軟件是綠色版本,直接解壓,點擊使用即可
?
2、填寫相關(guān)參數(shù)
?
?
?3、測試是否可以正常連接
?
4、點擊連接
?5、查看數(shù)據(jù)
?(三)日志統(tǒng)計展示
1、很多網(wǎng)站需要統(tǒng)計某個頁面或者某個功能訪問量,如果訪問量比較大,需要記錄的組件具有很快的讀寫效率??梢允褂霉δ苄愿嗟膍ongodb來完成此業(yè)務(wù)。mongodb具有更多的數(shù)據(jù)靈活性。
2、網(wǎng)站訪問日志記錄的信息:
ip 用戶訪問的來源ip
url? 用戶訪問的地址? 功能模塊頁面地址
time? 訪問時間? 記錄用戶訪問的時間值
user_agent 用戶訪問的客戶端信息
3、使用服務(wù)器
web1(server01)->mycat(server07)->master(server02)->slave(server06)->cache(server08)->mongodb(server10)
4、Tip:nginx負載均衡服務(wù)器解決后端服務(wù)獲取不到真實用戶IP的方式
①在負載均衡nginx服務(wù)器,填寫真實用戶IP的轉(zhuǎn)發(fā)
注意如果使用負載均衡,后端獲取的IP為負載均衡代理的IP。
如果后端需要獲取到真是的IP,負載均衡服務(wù)器,必須要配置參數(shù),把真實IP進行傳輸?
②web服務(wù)器的nginx需要配置接收真實的用戶IP,需要使用到模塊--with-http_realip_module,在編譯安裝nginx時需要加入
③配置語法
④操作實現(xiàn)步驟:
?(1)刪除原來的文件
(2)上傳修改好的文件
(3)訪問頁面之后,可以查看到訪問已經(jīng)被記錄
php中獲取代理的真實IP的方式,但是一定要注意必須是代理服務(wù)器有傳真實IP
?文章來源:http://www.zghlxwxcb.cn/news/detail-625353.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-625353.html
到了這里,關(guān)于企業(yè)架構(gòu)NOSQL數(shù)據(jù)庫之MongoDB的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!