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