東莞網(wǎng)站如何制作google play官網(wǎng)入口
簡單明了說明MySQL,ES,MongoDB的各自特點,應(yīng)用場景,以及MongoDB如何使用的第一章節(jié).
一. SQL與NoSQL
????????SQL被稱為結(jié)構(gòu)化查詢語言.是傳統(tǒng)意義上的數(shù)據(jù)庫,數(shù)據(jù)之間存在很明確的關(guān)聯(lián)關(guān)系,例如主外鍵關(guān)聯(lián),這種結(jié)構(gòu)可以確保數(shù)據(jù)的完整性(數(shù)據(jù)沒有缺失并且正確).但是正因為這種嚴(yán)密的結(jié)構(gòu)使得擴(kuò)展起來不方便,而且系統(tǒng)越膨脹,關(guān)系越復(fù)雜,如果遇到系統(tǒng)升級,數(shù)據(jù)量增加,數(shù)據(jù)表增加,程序員就該頭痛了.
? ? ? ? 如果把SQL稱為正規(guī)化設(shè)計,那么NoSQL是反正規(guī)化設(shè)計,其中的數(shù)據(jù)沒有關(guān)聯(lián),更容易擴(kuò)展,數(shù)據(jù)模型更加的靈活,你甚至可以隨時修改數(shù)據(jù)存儲的結(jié)構(gòu).這樣有違規(guī)范的設(shè)計,帶來了數(shù)據(jù)擴(kuò)充的便利性,在信息飛速發(fā)展的互聯(lián)網(wǎng)時代,這真是每個程序員所需要的,但是由于這種缺少關(guān)聯(lián)和規(guī)則,對數(shù)據(jù)的完整性就是它的一大缺點,正所謂有利有弊.
二.MySQL,Redis,ES,MongDB
1.MySQL應(yīng)用場景
MySQL是典型的SQL代表,在數(shù)據(jù)結(jié)構(gòu)比較固定,對數(shù)據(jù)完整性有嚴(yán)格要求的地方應(yīng)該使用MySQL,例如商品庫存,用戶積分,用戶個人信息等地方.
2.Redis應(yīng)用場景
????????前面提到的集中數(shù)據(jù)庫,除了MySQL之外,其它的都屬于NoSQL.
????????Redis是鍵值對存儲系統(tǒng),通過Key進(jìn)行數(shù)據(jù)的操作,通常是將數(shù)據(jù)存儲在內(nèi)存中,當(dāng)然也可以做持久化,但是通常也沒有太多必要,用來做數(shù)據(jù)持久化的數(shù)據(jù)庫很多,而且比它好用,所以Reids通常用來做數(shù)據(jù)的緩存.因為是通過key進(jìn)行數(shù)據(jù)的操作,并且存儲在內(nèi)存中,所以操作速度非???但是你也別往里面存很多數(shù)據(jù),并且數(shù)據(jù)也要設(shè)置一個過期時間.
? ? ? ? Redis通常用來存儲用戶登錄信息,例如token,根據(jù)明確id值查詢的并且可能再同一個時間段內(nèi)會被反復(fù)讀取的數(shù)據(jù).
3.ES應(yīng)用場景
? ? ? ? ES是分布式搜索和分析引擎,大概類似于百度搜索,淘寶搜索一類的,它的作用是對大量數(shù)據(jù)進(jìn)行快速檢索,并且根據(jù)要求對檢索出來的數(shù)據(jù)進(jìn)行評分,你可以按照評分或者其它規(guī)則對其進(jìn)行排序,并且它的數(shù)據(jù)存儲采用主分片,父分片的形式.有利于做大數(shù)據(jù)的搜索功能.并且可以對數(shù)據(jù)進(jìn)行聚合等操作.
? ? ? ? ES可以用于做一些低質(zhì)量,大數(shù)據(jù)記錄的檢索功能,所謂低質(zhì)量就是這些數(shù)據(jù)并不是要求很嚴(yán)密的或者說實時的,ES數(shù)據(jù)被稱為準(zhǔn)實時,也就是離實時數(shù)據(jù)還有不少差距.類似于信息檢索,用戶日志檢索,商品檢索數(shù)據(jù)可以放在ES中.
4.MongoDB以及應(yīng)用場景
? ? ? ? MongoDB是本篇文章介紹的重點,讓我多啰嗦幾句.
? ? ? ? MongoDB是NoSQL中的文檔形數(shù)據(jù)庫,采用文檔的形式存儲數(shù)據(jù),也就是將單個實體的所有數(shù)據(jù)都存儲在文檔中,而文檔又存在集合中.MongoDB是半結(jié)構(gòu)化的非關(guān)系型數(shù)據(jù)庫,相當(dāng)于是在NoSQL中混入了一個不堅定的叛徒.在MongoDB中有以下概念.這里只介紹了幾個特殊之處.
? ? ? ?1.DataBase:不同與另外集中NoSQL,MongoDB有數(shù)據(jù)庫的概念;大概等用于mysql中的數(shù)據(jù)庫概念.
? ? ? ? 2.集合:MongoDB是面向集合Collection進(jìn)行存儲的,這個相當(dāng)于MySQL中的數(shù)據(jù)表;
? ? ? ? 3.文檔:Document是MongoDB存儲數(shù)據(jù)的基本單元,相當(dāng)于MySQL中的一個實體(也就是一行數(shù)據(jù)),MongoDB中的文檔形式是一種叫做BSON的文本.
? ? ? ? 4.MongoDB中也有MySQL中的視圖,索引,存儲過程,用戶,字段的概念.字段相當(dāng)于數(shù)據(jù)表的列,但是這個列可以彈性的增加或者減少.
? ? ? ? 就是這樣一個SQL與NoSQL結(jié)合起來的怪胎確實目前做系統(tǒng)開發(fā)經(jīng)常用到的一種數(shù)據(jù)庫,因為在實際應(yīng)用中它的優(yōu)點是其他數(shù)據(jù)庫所不具備的.
2.4.1?MongoDB的文檔
????????MongoDB的數(shù)據(jù)是已文檔的形式存儲的,而文檔是已BSON格式存儲的,BSON是以JSON為基礎(chǔ)經(jīng)過改良好的一種文本格式,使用JSON的基本格式(例如:鍵值對,{},[]等),但是引入了新的數(shù)據(jù)類型,例如日期ObjectId等.但是BSON會占用更大的空間,以此來換取更快的查詢速度,典型的以空間換取時間模式.
?2.4.2?MongoDB的特征
? ? ? ? SQL具有ACID(原子性,一致性,隔離性和持久性),NoSQL具有BASE(基本可用性,可伸縮性,最終一致性),而MongoDB在NoSQL的基礎(chǔ)上增加了原子性和事務(wù).
2.4.3?MongoDB的應(yīng)用場景
? ? ? ? 鑒于MongoDB的這些特性,它可以用來處理大量的低價值數(shù)據(jù),并且對數(shù)據(jù)處理性能要求比較高,而且還可能存在數(shù)據(jù)結(jié)構(gòu)需要高度的伸縮性.
? ? ? ? 通俗來說,就是處理一些數(shù)據(jù)量多,而且數(shù)據(jù)相關(guān)度不高,不存在需要很高的準(zhǔn)確性(例如實時的庫存),數(shù)據(jù)格式可能會有變化,并且還對數(shù)據(jù)的操作要求響應(yīng)比較快.那么哪些場景符合這些特征了?
? ? ? ? 例如:用戶評論,評分,商品詳情,這類信息.
三.?MongoDB的安裝
3.1 安裝MogoDB Server
這個比較簡單,下載社區(qū)版,直接安裝,沒有什么特別需要注意的地方.
http://MongoDB 社區(qū)版
3.2 下載? MogoDB Shell
MogoDB Shell可以使用命令操作MongoDB,下載之后直接可以用,建議放在MongoDB安裝文件夾里面,以免找不到.
MongoDB Shell
3.3 使用Navicat Premium連接數(shù)據(jù)庫
和連接MySQL差不多,用Navicat操作MongoDB比較方便.
四.創(chuàng)建MongoDB的登錄用戶
? ? ? ? 在下載的MongoDB Shell中找到 mongosh-1.10.4\bin\mongosh.exe 文件,雙擊運行.顯示一個DOS窗口,打開后敲回車(使用默認(rèn)連接方式).輸入以下命令:
use admin
連接到admin數(shù)據(jù)庫,這個數(shù)據(jù)庫可以讓你創(chuàng)建用戶.然后再輸入下面的命令:
db.createUser({user:"<用戶名>",pwd:"<密碼>",roles:["root"]})
輸入的時候替換<>的內(nèi)容,包括<>.這樣就可以創(chuàng)建用戶名和密碼了.
創(chuàng)建用戶名和密碼之后,還需要修改一個配置.打開
C:\Program Files\MongoDB\Server\6.0\bin\mongod.cfg 這個文件,并且新增下面的配置:
#security:
security:authorization: enabled
? 好了,MongoDB的用戶名就已經(jīng)創(chuàng)建好了.
????????